黑马程序员技术交流社区

标题: 请问TreeSet和HashSet有什么区别呢? [打印本页]

作者: hei930923    时间: 2016-1-15 19:20
标题: 请问TreeSet和HashSet有什么区别呢?
请问TreeSet和HashSet有什么区别呢?
作者: jacky左    时间: 2016-1-16 00:01
TreeSet底层是二叉树算法,会自动排序.HashSet底层是哈希算法.不会排序,一般如果要排序就用TreeSet,没有特殊要求就HashSet
作者: @夏一    时间: 2016-1-16 11:17
本帖最后由 @夏一 于 2016-1-16 11:54 编辑

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



作者: 黑色皮肤的马    时间: 2016-1-16 13:17
jacky左 发表于 2016-1-16 00:01
TreeSet底层是二叉树算法,会自动排序.HashSet底层是哈希算法.不会排序,一般如果要排序就用TreeSet,没有特殊 ...

受教了。。。。。
作者: 黑色皮肤的马    时间: 2016-1-16 13:18
@夏一 发表于 2016-1-16 11:17
TreeSet和HashSet均具有存取顺序无序,元素唯一的特点.-------------------------------------------------- ...

好详细,受教。。。。。。。。。。
作者: Android666    时间: 2016-1-16 13:32
TreeSet类不仅实现了Set接口,还实现了java.util.SortedSet接口,从而保证在遍历集合时按照递增的顺序获得对象。遍历对象时可能是按照自然顺序递增排列,所以存入用TreeSet类实现的Set集合的对象必须实现Comparable接口;也可能是按照指定比较器递增排列,即可以通过比较器对用TreeSet类实现的Set集合中的对象进行排序。  HashSet类按照哈希算法来存取对象,当向集合中加入一个新对象时,会调用对象的HashCode()方法得到对象的哈希码,然后根据这个码计算出对象在集合中存储的位置。
作者: 15000183754    时间: 2016-1-17 19:09
数据结构不一样!




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2