我一直在阅读关于这个主题的大量博客,但我仍然无法清楚地知道何时使用另一个散列集或树集.
举一个例子:
我有一个类似的对象.我把它们放在HashSet中.现在当(只在我想要的时候)我想设置基于compareTo逻辑进行排序时,我可以调用Collections.sort(object)
而TreeSet的默认一直使用的compareTo或比较(OBJ1,OBJ2)所有的时间.因此,TreeSet会遇到性能,但输出与#1(Collections.sort)相同.
这种理解是否正确?
Ank*_*hal 86
HashSet使用哈希表实现.元素没有订购.在add, remove,和包含的方法有固定的时间复杂度为O(1) .
TreeSet使用树结构(算法手册中的红黑树)实现.集合中的元素已排序,但add,remove和contains方法的时间复杂度为O(log(n)).它提供了几种处理有序集的方法,如first(), last(), headSet(), tailSet()等.
1)HashSet和TreeSet表现之间的第一个主要区别.如果不需要对元素进行排序,HashSet则速度比TreeSet并且应该是首选.
2)HashSet和之间的第二个区别TreeSet是HashSet允许空对象但TreeSet不允许空对象和抛出NullPointerException,为什么,因为TreeSet使用compareTo()方法比较键compareTo()并将抛出java.lang.NullPointerException.
3)之间的另一个显著差异HashSet和TreeSet的是,HashSet通过将备份HashMap,同时TreeSet由TreeMap中使用Java支持.
4)之间的一个更差HashSet和TreeSet这值得记住的是,使用的HashSet equals()方法在集和用于检测重复的同时来比较两个对象TreeSet的用途compareTo()方法相同的目的.如果equals()和compareTo()不一致,即对于两个相等的对象equals应该返回true而compareTo()应该返回零,而不是它将破坏Set接口的契约并且将允许像TreeSet这样的Set实现中的重复
5)之间现在最重要的区别HashSet和TreeSet被订购.在以Java 或Java中的方法定义的排序顺序维护对象时,HashSet不保证任何顺序.TreeSetComparableComparator
| 归档时间: |
|
| 查看次数: |
41812 次 |
| 最近记录: |