HashSet 和 TreeSet 的区别在于:1、速度和内部实现不同;2、排序方式不同;3、空对象不同;4、比较方式不同。HashSet用于搜索、插入和删除等操作。这些操作平均需要花费固定时间。HashSet比TreeSet快。HashSet是使用哈希表实现的。TreeSet以O(Log n)进行搜索,插入和删除,该值高于HashSet。
1、速度和内部实现不同
HashSet:用于搜索,插入和删除等操作。这些操作平均需要花费固定时间。HashSet比TreeSet快。HashSet是使用哈希表实现的。
TreeSet:TreeSet以O(Log n)进行搜索,插入和删除,该值高于HashSet。但是TreeSet保留排序的数据。此外,它支持诸如high()(返回最低的较高元素),floor(),ceiling()等操作。这些操作在TreeSet中也是O(Log n),在HashSet中不受支持。 TreeSet是使用自平衡二进制搜索树(红黑树)实现的。 TreeSet由Java中的TreeMap支持。
2、排序方式不同
HashSet中的元素未排序。 TreeSet按照Java中的Comparable或Comparator方法定义的排序顺序维护对象。默认情况下,TreeSet元素以升序排序。它提供了多种方法来处理有序集,例如first(),last(),headSet(),tailSet()等。
3、空对象不同
HashSet允许空对象。 TreeSet不允许null对象并抛出NullPointerException,为什么,因为TreeSet使用compareTo()方法比较键,而compareTo()会抛出java.lang.NullPointerException。
4、比较方式不同
HashSet使用equals()方法比较Set中的两个对象并检测重复项。 TreeSet使用compareTo()方法实现相同目的。如果equals()和compareTo()不一致,即对于两个相等的对象,equals应该返回true,而compareTo()应该返回零,这将打破Set接口的协定,并允许在Set实现中重复使用,例如TreeSet。
如果要排序的Set,较好将元素添加到HashSet中,然后将其转换为TreeSet,而不是创建TreeSet并向其中添加元素。
延伸阅读:
什么是HashSet?
HashSet类,是存在于java.util包中的类。同时也被称为集合,该容器中只能存储不重复的对象。
对于 HashSet 而言,它是基于 HashMap 实现的,底层采用 HashMap 来保存元素,所以如果对 HashMap 比较熟悉了,那么学习 HashSet 也是很轻松的。
对于 HashSet 而言,它是基于 HashMap 实现的,HashSet 底层使用 HashMap 来保存所有元素,因此 HashSet 的实现比较简单,相关 HashSet 的操作,基本上都是直接调用底层 HashMap 的相关方法来完成,我们应该为保存到 HashSet 中的对象覆盖 hashCode() 和 equals()。
文章标题:HashSet 和 TreeSet 有什么区别,发布者:小编,转载请注明出处:https://worktile.com/kb/p/37844