📜  JavaEnumSet和TreeSet的区别

📅  最后修改于: 2021-09-13 02:10:47             🧑  作者: Mango

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.