首页 > 试题广场 >

HashSet和TreeSet有什么区别?

[问答题]
HashSet和TreeSet有什么区别?
hashset是由hash表实现的,是无序的; treeset是由树形结构实现的,是有序的
编辑于 2019-04-25 19:32:02 回复(0)
更多回答
Hashset 的底层是由哈希表实现的,Treeset 底层是由红黑树实现的。如果需要在Treeset 中插入对象,需要实现Comparable 接口,为其指定比较策略。
发表于 2016-01-31 13:52:54 回复(1)
HashSet不允许保存重复对象,这个重复是有自己定义的。比如需要保存People对象,People类包含名字和年龄两个属性,你可以在People类中重写equals和hashCode方法,指明姓名和年龄都相等的People对象是相等的,那么就不能重复存入姓名和年龄相等的People对象。HashSet中的对象没有顺序。
TreeSet保存的对象有顺序性,也有不可重复性。顺序性有两种方法实现,一个是类实现Comparable接口;另一个是构造比较器,将比较器对象作为TreeSet的构造函数的参数传入。顺序性和不可重复性都是在compareTo()方法中实现的,当按年龄排序时,先比较年龄,年龄相等再比较姓名,姓名相等则不存入。
编辑于 2017-03-09 11:18:51 回复(0)
1、HashSet对速度进行了优化,提供了最快的查找速度,无特殊说明一般默认是用这个Set
放到HashSet中的元素要保证唯一,应该重写hashCode方法和equals方法,但是不能保证元素有序
底层实现是哈希结构
2、TreeSet底层实现是红黑树(自平衡二叉树),不但能保证元素唯一,还能元素保证有序,
存放到TreeSet中的元素应该实现Comparable接口,重写compareTo方法,否则会抛出ClassCastException
按照该方法指定的规则维持元素的顺序
3、LinkedHashSet,底层实现是哈希表和链表,保持了HashSet的速度,还能按照插入元素的顺序维持元素顺序

发表于 2017-08-18 23:32:48 回复(1)
HashSet是由一个hash表来实现的,因此,它的元素是无序的。add(),remove(),contains()方法的时间复杂度是O(1)。 另一方面,TreeSet是由一个树形的结构来实现的,它里面的元素是有序的。因此,add(),remove(),contains()方法的时间复杂度是O(logn)。
发表于 2016-07-12 16:43:12 回复(0)
HashSet是由一个hash表来实现的,因此,它的元素是无序的。add(),remove(),contains()方法的时间复杂度是O(1)。
TreeSet是由一个红黑树的结构来实现的,它里面的元素是有序的。因此,add(),remove(),contains()方法的时间复杂度是O(logn)。
发表于 2017-03-27 14:50:41 回复(0)
HashSet的contains方法的时间复杂度应该是O(n)吧
发表于 2016-07-26 22:26:33 回复(2)
HashSet是有一个hash表来实现的,因此其集合中的元素是无序的。因此其add,remove,contains方法的时间复杂度为O(1) TreeSet是由一个树结构来实现的,它里面的元素是有序的,因此其add,remove,contains方法的时间复杂度为O(logn
发表于 2016-05-03 12:53:57 回复(0)
hashSet是无序的,底层是哈希表实现的。
treedSet底层是红黑树实现的
发表于 2020-09-02 15:37:33 回复(0)
Hashset 的底层是由哈希表实现的,元素不重复无序,Treeset 底层是由红黑树实现的,元素有序,如果需要在Treeset 中插入对象,需要实现Comparable 接口或者创建一个Comparator接口的匿名对象传入TreeSet构造器中.
发表于 2020-07-02 22:47:37 回复(0)
HashSet底层是由hass表实现的,TreeSet底层是由红黑树实现的;
HashSet中的元素是无序的,TreeSet中的元素是有序的;
HashSet允许存放null值,TreeSet不允许存放null值.
发表于 2020-06-26 08:57:57 回复(0)

hashset是用hash表实现的,无序

treeset是用红黑树实现,有序

编辑于 2020-03-04 12:24:27 回复(0)

hashset是哈希表实现的,复杂度为O(1)。treeset是红黑树实现的,复杂度为O(logn)。

发表于 2020-03-02 21:44:53 回复(0)
hashset底层是哈希表,集合是无序不可重复的,所以增删时间复杂度大 treeset底层是红黑树,集合是有序(实现comparable接口,重写hashcode和equles方法来设定排序规则)不可重复的,所以增删时间复杂度小
发表于 2019-11-21 23:37:18 回复(0)
战狼通过当复读机把复读狗的老妈点得***迭起
发表于 2019-08-30 09:02:59 回复(0)
hashset是由一个hash表来实现的,里面的元素无序,不可重复,add方法,remove方法,contain方法空间复杂度是O(1) hashtree是由一个树形结构实现的。有序不可重复,方法的空间复杂度是O(logn)
发表于 2019-05-07 00:03:11 回复(0)
HashSet是由一个hash表来实现的,因此,它的元素是无序的。add(),remove(),contains()方法的时间复杂度是O(1)。 另一方面,TreeSet是由一个树形的结构来实现的,它里面的元素是有序的。因此,add(),remove(),contains()方法的时间复杂度是O(logn)。
发表于 2019-04-30 22:25:24 回复(0)

HashSet是由一个hash表来实现的,因此,它的元素是无序的add() remove() contains()方法的时间复杂度是O(1) 另一方面 treeSet是由一个树形的结构来实现的它里面的元素是有序的,因此add() remove() contains()方法的时间复杂度是O(logn)
发表于 2019-04-28 16:45:15 回复(0)
Hashset是由hash表来实现的因此它的元素是无序的,Treeset是有树状结构表现的,所以它的元素是有序的
发表于 2019-04-26 22:34:35 回复(0)

HashSet是一个由hash表来实现的因此他元素是无序的

Treeset是由一个树形的结构来实现的

发表于 2019-04-26 22:28:21 回复(0)