當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


Java EnumSet和TreeSet的區別用法及代碼示例


EnumSet 和 TreeSet 都是在 collection framework 中定義的類。但它們之間幾乎沒有什麽區別。在本文中,我們試圖涵蓋它們之間的所有這些差異。

1. EnumSetEnumSet 是一個專門的實現接口用於枚舉類型。它擴展了 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. TreeSetTreeSet 是一個實現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 是存儲大量排序信息的絕佳選擇,由於其訪問和檢索時間更快,因此應該快速訪問這些信息。


相關用法


注:本文由純淨天空篩選整理自prashant_srivastava大神的英文原創作品 Difference Between EnumSet and TreeSet in Java。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。