EnumSet 和 TreeSet 都是在集合框架内定义的类。但它们之间几乎没有区别。在本文中,我们试图涵盖它们之间的所有这些差异。
1. EnumSet : EnumSet 是枚举类型的 Set 接口的特殊实现。它扩展了 AbstractSet 并在Java实现了 Set 接口。 EnumSet 的几个要点如下:
- EnumSet 类是Java集合框架的成员,它不是同步的。
- EnumSet 中的所有元素都必须来自单个枚举类型,该枚举类型在显式或隐式创建集合时指定。
- EnumSet 比 HashSet 快得多。
- 如果我们尝试插入 null 对象, EnumSet 不允许插入 null 对象,它将抛出NullPointerException 。
- 它使用故障安全迭代器,因此如果在迭代时修改了集合,它不会抛出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
= EnumSet.of(Colors.Pink, Colors.Green);
Iterator itr = colors.iterator();
// Iterate and print elements to
// the console
System.out.println("EnumSet : ");
while (itr.hasNext()) {
System.out.println(itr.next());
}
}
}
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 ts = new TreeSet();
// 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));
}
}
输出
EnumSet :
Pink
Green
2. TreeSet : TreeSet 是Java中实现SortedSet 接口的类。它使用Tree进行存储。无论是否提供显式比较器,元素的顺序都由使用其自然顺序的集合维护。它也可以由在集合创建时提供的 Comparator 进行排序,具体取决于使用的构造函数。 TreeSet通过继承AbstractSet 类实现了NavigableSet 接口。实现可导航集的类是 TreeSet,它是自平衡树的实现。因此,这个界面为我们提供了一种在这棵树中导航的方法。
例子:
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 ts = new TreeSet();
// 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 is a specialized implementation of the Set interface. | TreeSet is a class that implementation the SortedSet interface in java. |
Data Structure | It internally represented as a BitVector. | It internally represented as a Red-black tree. |
Sorting | It sorts the elements according to natural order. | It sorts the elements according to sorted order. |
Iterator | EnumSet iterator is weakly consistent. | TreeSet iterator is Fail-fast. |
Best Choice | EnumSet is best choice for storing enumeration type elements. | TreeSet serves as an excellent choice for storing large amounts of sorted information which are supposed to be accessed quickly because of its faster access and retrieval time. |