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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

请问TreeSet和HashSet有什么区别呢?

6 个回复

正序浏览
数据结构不一样!
回复 使用道具 举报
TreeSet类不仅实现了Set接口,还实现了java.util.SortedSet接口,从而保证在遍历集合时按照递增的顺序获得对象。遍历对象时可能是按照自然顺序递增排列,所以存入用TreeSet类实现的Set集合的对象必须实现Comparable接口;也可能是按照指定比较器递增排列,即可以通过比较器对用TreeSet类实现的Set集合中的对象进行排序。  HashSet类按照哈希算法来存取对象,当向集合中加入一个新对象时,会调用对象的HashCode()方法得到对象的哈希码,然后根据这个码计算出对象在集合中存储的位置。
回复 使用道具 举报
@夏一 发表于 2016-1-16 11:17
TreeSet和HashSet均具有存取顺序无序,元素唯一的特点.-------------------------------------------------- ...

好详细,受教。。。。。。。。。。
回复 使用道具 举报
jacky左 发表于 2016-1-16 00:01
TreeSet底层是二叉树算法,会自动排序.HashSet底层是哈希算法.不会排序,一般如果要排序就用TreeSet,没有特殊 ...

受教了。。。。。
回复 使用道具 举报
本帖最后由 @夏一 于 2016-1-16 11:54 编辑

TreeSet和HashSet均具有存取顺序无序,元素唯一的特点.-----------------------------------------------------
TreeSet:
底层数据结构是依靠红黑树(二叉树),即在比较时,比root小的放左边,比root大的放右边.相等的,不放.
为保证元素排序,要让元素所属的类实现Comparable接口,或者让集合构造方法接受Comparator的实现类对象.----------------------------------------------------
HashSet:
底层数据结构是哈希表(是一个元素为链表的数组).
在使用HashSet存储自定义对象数据时,为保证元素的唯一,必须重写hashCode()和equals()方法.
执行顺序:
先通过hashCode()计算比较哈希值,相同,再用equals()比较内容,再相同,就不存了.


回复 使用道具 举报
TreeSet底层是二叉树算法,会自动排序.HashSet底层是哈希算法.不会排序,一般如果要排序就用TreeSet,没有特殊要求就HashSet
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马