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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。