在深入讨论差异之前,让我们简要回顾一下 hashset 和 treeset 是什么。
1.1 什么是hashset?hashset 它是用哈希表存储的集合。它实现了 set 接口,这意味着它不允许重复元素。元素无序,无排序,使hashset适合需要快速搜索、插入和删除的场景。
1.2 什么是treset?treeset 这是一种实现 navigableset 接口的集合。它用红黑树储存,这意味着元素以排序有序的方式储存。 treeset 不允许重复元素,但非常适合需要保持元素自然排序的情况。
2. hashset 和 treeset 主要区别 2.1 订购- hashset:不维护元素的任何顺序。添加元素的顺序与它们的存储顺序无关。
- treeset :元素根据元素的自然顺序或指定的比较器自动排序。
- hashset :为基本操作提供恒定的时间复杂性,如添加、删除和包含 o(1)在不考虑顺序的情况下使其速度更快。
- treeset :为基本操作提供 log(n) 由于元素存储在树结构中,时间复杂,比基于哈希的结构需要更多的时间。
hashset :内部使用哈希表。每个元素的哈希码用于确定其存储位置。如果两个元素有相同的哈希码,则使用称为链接或检测的技术来处理冲突。
立即学习“Java免费学习笔记(深入);
示例代码:
set<string> hashset = new hashset(); hashset.add("apple"); hashset.add("banana"); hashset.add("mango"); </string>
treeset:红黑树用于内部。每一种元素都是按照自然顺序或提供的比较器放置的,以保证树木的平衡。
示例代码:
set<string> treeset = new treeset(); treeset.add("apple"); treeset.add("banana"); treeset.add("mango"); </string>
2.4 空元素
- hashset :允许有一个 null 元素,因为它是对的 null 值得哈希处理。
- treeset :不允许 null 元素,因为它需要比较元素来排序它们,并且会 null 与任何对象进行比较,都会被抛出 nullpointerexception。
- hashset :默认不同步,但可以使用 collections.synchronizedset. 进行同步
- treeset :默认情况也不同步,但可以以同样的方式同步。
hashset和treeset都不允许重复元素。但是,检测重复项的方法不同。 hashset采用hashcode()和equals()方法,treset采用compareto()或comparator。
2.7 内存使用- hashset :由于底部哈希表和链表处理冲突的潜力,通常需要更多的内存。
- treeset :由于使用树结构,使用的内存较少,但维护顺序的费用较多。
hashset 与 linkedhashset :虽然 hashset linkedhashsetetet不保证任何顺序 保持插入顺序。treeset 通过自定义比较器自然或排序元素。
2.9 用例- hashset :最好在快速访问时间和顺序不重要的时候使用。
- treeset :非常适合需要按顺序访问元素的场景。
以下代码片段演示了迭代顺序的差异:
// HashSet Example Set<string> hashSet = new HashSet(); hashSet.add("Zebra"); hashSet.add("Apple"); hashSet.add("Mango"); System.out.println("HashSet: " + hashSet); // Output may be unordered, e.g., [Apple, Mango, Zebra] // TreeSet Example Set<string> treeSet = new TreeSet(); treeSet.add("Zebra"); treeSet.add("Apple"); treeSet.add("Mango"); System.out.println("TreeSet: " + treeSet); // Output will be sorted, e.g., [Apple, Mango, Zebra] </string></string>
三、结论
在 hashset 和 treeset 之间的选择可以归结为您的具体需求:
- 当您需要高性能集合而不关心元素顺序时,请使用hashset。 当您需要按自定义顺序自然排序或排序元素时,请使用
- treeset。
读更多帖子:java 中 hashset 和 treeset 十大主要区别
以上是Java 中 HashSet 和 TreeSet 更多关于图灵教育的其他相关文章,请关注图灵教育的主要区别!