本帖最后由 想飞的鱼 于 2014-6-13 09:33 编辑
class FormerOrder implements Comparator<Integer> //自定义比较器
{
public int compare(Integer o1,Integer o2)
{
if(o1==o2)
{
System.out.println(o1+"......"+o2);
return 0;
}else {
System.out.println(o1+"====="+o2);
return 1;
}
//return o1.compareTo(o2);
}
}
往楼主代码里加入了两条输出语句,结果如下:
5......5
5添加::true
4=====5
4添加::true
3=====5
3=====4
3添加::true
2=====4
2=====3
2添加::true
1=====4
1=====3
1=====2
1添加::true
5=====4
5=====2
5=====1
5添加::true
4......4
4添加::false
3=====4
3=====2
3=====1
3=====5
3添加::true
2=====4
2......2
2添加::false
1=====4
1=====2
1=====5
1=====3
1添加::true
[5 4 3 2 1 5 3 1 ]
发现,添加的时候,这个元素先和谁比不确定,但是不相同都return 1往右走,无法和TreeSet集合中所有的元素比一遍,因此才会出现上述问题的吧?
个人认为这是因为二叉树的数据结构决定的,楼主可供参考
如果非要让TreeSet去除其排序功能,只保留其去除重复功能,鄙人不才,添加了些代码,但是其实也就失去了TreeSet集合的意义吧
- //以下代码是想撤销TreeSet集合的排序功能,但依旧保留唯一性
- import java.util.*;
- public class LoopCircle {
- public static void main(String args[])
- {
- //TreeSet<Integer> temp = new TreeSet<Integer>();//创建一个临时容器,保持和下面的circle“同步”
- ArrayList<Integer> temp = new ArrayList<Integer>();//用ArrayList也可以
- TreeSet<Integer> circle=null;;
- circle=new TreeSet<Integer>(new FormerOrder(temp));
- int num[]={5,4,3,2,1};
-
- //向set集合中添加两次数组
- for(int i=0;i<5;i++){
-
- System.out.println(num[i]+"添加::"+circle.add(num[i]));
- temp.add(num[i]);//每往circle里面添加一个元素,就往temp里面添加一个元素
- }
-
- for(int i=0;i<5;i++){
-
- System.out.println(num[i]+"添加::"+circle.add(num[i]));
- temp.add(num[i]);
- }
-
- if(circle!=null){
- Iterator<Integer> iter=circle.iterator();
- System.out.print("[");
- while(iter.hasNext()){
- System.out.print(iter.next()+" ");
- }
- System.out.print("]");
- }
- }
- }
- class FormerOrder implements Comparator<Integer> //自定义比较器
- {
- private ArrayList<Integer> temp;
- FormerOrder(ArrayList<Integer> temp)//构造时,传入temp使其“监视”temp里面都有哪些元素
- {
- this.temp = temp;
- }
- public int compare(Integer o1,Integer o2)
- {
- if(temp.contains(o1))
- {
- // System.out.println(o1+"......"+o2);
- return 0;
- }else {
- //System.out.println(o1+"====="+o2);
- return 1;
- }
- //return o1.compareTo(o2);
- }
- }
复制代码
|