EnumSet 和 TreeSet 都是在 collection framework 中定义的类。但它们之间几乎没有什么区别。在本文中,我们试图涵盖它们之间的所有这些差异。
1. EnumSet:EnumSet 是一个专门的实现放接口用于枚举类型。它扩展了 AbstractSet 并实现了 Java 中的 Set 接口。 EnumSet的几个要点如下:
- EnumSet 类是 Java Collections Framework 的成员,并且它不同步。
- EnumSet 中的所有元素必须来自显式或隐式创建集合时指定的单个 enumeration type。
- EnumSet 比 HashSet 快得多。
- EnumSet不允许插入空对象如果我们尝试插入空对象,它将抛出NullPointerException.
- 它使用一个fail-safe迭代器,所以它不会抛出ConcurrentModificationException如果集合在迭代时被修改。
例子:
Java
// Java program to demonstrate
// the EnumSet
import java.util.*;
class enumSetExample {
enum Colors {
Red,
Pink,
Grey,
Yellow,
Green
}
public static void main(String args[])
{
// Creating an EnumSet
EnumSet<Colors> colors
= EnumSet.of(Colors.Pink, Colors.Green);
Iterator<Colors> itr = colors.iterator();
// Iterate and print elements to
// the console
System.out.println("EnumSet : ");
while (itr.hasNext()) {
System.out.println(itr.next());
}
}
}
输出
EnumSet : Pink Green
2. TreeSet:TreeSet 是一个实现SortedSet Interface在 Java 。它使用树用于存储。元素的顺序由集合使用其自然顺序来维护,无论是否显式Comparator Interface提供。它还可以通过在设置创建时提供的比较器来排序,具体取决于使用哪个构造函数。 TreeSet 实现了NavigableSet接口通过继承AbstractSet Class。实现可导航集的类是 TreeSet,它是 self-balancing 树的实现。因此,这个接口为我们提供了一种浏览这棵树的方法。
例子:
Java
// Java code to demonstrate
// the working of TreeSet
import java.util.*;
class TreeSetDemo {
public static void main(String[] args)
{
// Creating an empty TreeSet
TreeSet<String> ts = new TreeSet<String>();
// Elements are added using add() method
ts.add("Geek");
ts.add("For");
ts.add("Geeks");
ts.add("welcomes");
ts.add("you");
System.out.println("Tree Set is " + ts);
String check = "welcomes";
// Check if the above string exists in
// the treeset or not
System.out.println("Contains : " + check + " "
+ ts.contains(check));
// Print the first element in
// the TreeSet
System.out.println("First Value " + ts.first());
// Print the last element in
// the TreeSet
System.out.println("Last Value " + ts.last());
String value = "Geek";
// Find the values just greater
// and smaller than the above string
System.out.println("Higher " + ts.higher(value));
System.out.println("Lower " + ts.lower(value));
}
}
输出
Tree Set is [For, Geek, Geeks, welcomes, you] Contains : welcomes true First Value For Last Value you Higher Geeks Lower For
EnumSet 和 TreeSet 的区别:
PROPERTIES | EnumSet | TreeSet |
---|---|---|
Basic | EnumSet 是 Set 接口的专门实现。 | TreeSet是一个在java中实现SortedSet接口的类。 |
数据结构 | 它在内部表示为 BitVector。 | 它在内部表示为Red-black 树。 |
Sorting | 它根据自然顺序对元素进行排序。 | 它根据排序顺序对元素进行排序。 |
Iterator | EnumSet迭代器是弱一致的。 | TreeSet迭代器是Fail-fast。 |
最好的选择 | EnumSet是存储枚举类型元素的最佳选择。 | TreeSet 是存储大量排序信息的绝佳选择,由于其访问和检索时间更快,因此应该快速访问这些信息。 |
相关用法
- Java EnumSet allOf()用法及代码示例
- Java EnumSet allof()用法及代码示例
- Java EnumSet clone()用法及代码示例
- Java EnumSet complementOf()用法及代码示例
- Java EnumSet copyOf()用法及代码示例
- Java EnumSet noneOf()用法及代码示例
- Java EnumSet of()用法及代码示例
- Java EnumSet range()用法及代码示例
- Java Enum clone()用法及代码示例
- Java Enum compareTo()用法及代码示例
- Java Enum equals()用法及代码示例
- Java Enum finalize()用法及代码示例
- Java Enum getDeclaringClass()用法及代码示例
- Java Enum hashCode()用法及代码示例
- Java Enum name()用法及代码示例
- Java Enum ordinal()用法及代码示例
- Java Enum toString()用法及代码示例
- Java Enum valueOf()用法及代码示例
- Java EnumMap containsValue()用法及代码示例
- Java EnumMap hashCode()用法及代码示例
- Java EnumMap putAll()用法及代码示例
- Java Enumeration asIterator()用法及代码示例
- Java Enumeration hasMoreElements()用法及代码示例
- Java Enumeration nextElement()用法及代码示例
- Java EnumMap clear()用法及代码示例
注:本文由纯净天空筛选整理自prashant_srivastava大神的英文原创作品 Difference Between EnumSet and TreeSet in Java。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。