A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

1黑马币
为什么TreeSet第四个元素开始,不跟第一个元素比较,后面的元素只是跟最近的两个三比较

TreeSet集合里放元素{4,2,6,1,7,8}
下面代码运行结果发现:1只跟2、6比较了,但是没有跟第一个元素4比较,7也是只跟2、6比较了,没有跟第一个元素4比较。而8则没有跟4、6比较。
  1. import java.util.*;
  2. /*
  3. TreeSet排序的第一种方式:让元素自身具备比较性。
  4. 元素需要实现Comparable接口,覆盖compareTo方法。
  5. */
  6. import java.util.Iterator;
  7. import java.util.TreeSet;

  8. class  QuChong
  9. {
  10.         public static void main(String[] args)
  11.         {
  12.                
  13.                 TreeSet ts=new TreeSet();
  14.                
  15.                 ts.add(new MyList(4));
  16.                 ts.add(new MyList(2));
  17.                 ts.add(new MyList(6));
  18.                 ts.add(new MyList(1));
  19.                 ts.add(new MyList(7));
  20.                 ts.add(new MyList(8));
  21.                
  22.                 Iterator it=ts.iterator();
  23.                 while(it.hasNext()){
  24.                         MyList my=(MyList)it.next();
  25.                         System.out.print(my.getNum());
  26.                 }

  27.         }
  28. }

  29. class MyList implements Comparable
  30. {
  31.         private int num;
  32.         MyList(int num)
  33.         {
  34.                 this.num=num;
  35.         }
  36.         public int compareTo(Object obj){
  37.                 MyList my=(MyList)obj;
  38.                 System.out.println(this.num+"---"+my.num);
  39.                 if(this.num==my.num)
  40.                        
  41.                         return 0;
  42.                 return 1;

  43.         }
  44.         public int getNum()
  45.         {
  46.                 return num;
  47.         }
  48. }
复制代码

发现1只跟2、6比较了,但是没有跟第一个元素4比较,7也是。而8则没有跟4、6比较。


比较treeset.png (1.11 KB, 下载次数: 13)

比较treeset.png

最佳答案

查看完整内容

你集合中的元素是按这种结构储存的 集合中的第一个元素为根 按顺序取数和根元素比较 只有当找到比根元素小和大的元素构成2杈树结构时不在把取出的元素与根元素比较,每个分支上的元素同理只有当其构成完成的2杈树结构时其对应的根元素不在进行比较 这就是为什么你最后的8除去4都比了一个遍 因为2 和 6都没有形成完成的结构 ...

6 个回复

倒序浏览
你集合中的元素是按这种结构储存的  集合中的第一个元素为根 按顺序取数和根元素比较 只有当找到比根元素小和大的元素构成2杈树结构时不在把取出的元素与根元素比较,每个分支上的元素同理只有当其构成完成的2杈树结构时其对应的根元素不在进行比较 这就是为什么你最后的8除去4都比了一个遍 因为2 和 6都没有形成完成的结构
回复 使用道具 举报
我觉得他是跟所有叶节点比较的,你按照从上往下的比较需要知道每次向下的子树,但是他的比较是和所有的叶节点(包括未存的和存一个的)比较。其实最终都是二叉树存储的。
回复 使用道具 举报
asinzuo 来自手机 中级黑马 2015-8-14 15:53:43
板凳
War3cdota 发表于 2015-8-14 10:26
我觉得他是跟所有叶节点比较的,你按照从上往下的比较需要知道每次向下的子树,但是他的比较是和所有的叶节 ...

不是很到位的样子
回复 使用道具 举报
学习了。。。。
回复 使用道具 举报
因为他的原理是二叉树存储的,所以只需要一次一次比较确定了存储位置读取的时候按照从左到右就可以了!
回复 使用道具 举报
凡尘 中级黑马 2015-8-28 23:44:26
7#
木易水寒 发表于 2015-8-14 22:48
你集合中的元素是按这种结构储存的  集合中的第一个元素为根 按顺序取数和根元素比较 只有当找到比根元素小 ...

回答的非常好!~  二分叉结构的比较方式就是这样的。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马