当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


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。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。