TreeSet是Java中SortedSet接口最重要的实现之一,它使用Tree进行存储。无论是否提供显式比较器,元素的排序都使用它们的自然顺序由集合维护。如果要正确实现Set接口,则必须与equals一致。它也可以由设置创建时提供的比较器排序,具体取决于使用的构造函数。TreeSet通过继承AbstractSet类来实现NavigableSet接口。 TreeSet的几个重要特性如下:

  1. TreeSet实现SortedSet接口,因此不允许重复值。
  2. TreeSet中的对象按排序和升序存储。
  3. TreeSet不保留元素的插入顺序,但元素按键排序。
  4. TreeSet不允许插入异类对象。如果尝试添加hetrogeneous对象,它将在运行时抛出classCastException。
  5. TreeSet是存储大量已排序信息的绝佳选择,因为它可以更快地访问和检索,因此可以快速访问这些信息。
  6. TreeSet基本上是像Red-Black Tree这样的自平衡二叉搜索树的实现。因此,添加,删除和搜索等操作需要O(Log n)时间。并且按排序顺序打印n个元素的操作需要O(n)时间。

TreeSet类的构造函数:

    1. TreeSet t = new TreeSet();  这将创建空的TreeSet对象,其中元素将以默认的自然排序顺序存储。
    2. TreeSet t = new TreeSet(Comparator comp);  当需要对元素的排序顺序进行外部规范时,使用此构造函数。
    3. TreeSet t = new TreeSet(Collection col);  当从任何Collection对象到TreeSet对象需要任何转换时,将使用此构造函数。
    4. TreeSet t = new TreeSet(SortedSet s) ; 此构造函数用于将SortedSet对象转换为TreeSet对象。

同步TreeSet:

TreeSet中的实现在某种意义上不同步,即如果多个线程同时访问树集,并且至少有一个线程修改了该集,则必须在外部进行同步。这通常通过在自然封装集合的某个对象上进行同步来实现。如果不存在此类对象,则应使用Collections.synchronizedSortedSet方法“包装”该集合。这最好在创建时完成,以防止对集合的意外不同步访问:

TreeSet ts = new TreeSet();
Set syncSet = Collections.synchronziedSet(ts);

下面的程序说明了TreeSet的基本操作:

// Java program to demonstrate insertions in TreeSet
import java.util.*;

class TreeSetDemo
{
    public static void main (String[] args)
    {
        TreeSet<String> ts1= new TreeSet<String>();

        // Elements are added using add() method
        ts1.add("A");
        ts1.add("B");
        ts1.add("C");

        // Duplicates will not get insert
        ts1.add("C");

        // Elements get stored in default natural
        // Sorting Order(Ascending)
        System.out.println(ts1);
    }
}

输出:

[A,B,C]

在创建和添加元素到TreeSet时,必须记住两件事:

  • 首先,将null插入TreeSet会抛出NullPointerException因为在插入null时,它会与现有元素进行比较,并且null不能与任何值进行比较。
  • 其次,如果插入的对象无法与集合中存在的元素进行比较,则抛出ClassCastException

注意:对于空树集,当尝试插入null作为第一个值时,将从JDK 7获得NPE。从1.7开始,TreeSet完全不接受null。但是在JDK 6之前,null将被接受为第一个值,但是如果在TreeSet中插入任何更多值,则也会抛出NullPointerException。 因此它被认为是错误,因此在JDK 7中删除。

TreeSet类的方法:

TreeSet实现SortedSet,因此它具有Collection,Set和SortedSet接口中所有方法的可用性。以下是Treeset接口中的方法。

  1. void add(Object o)此方法将根据TreeSet中的某些排序顺序添加指定的元素。不会添加重复的entires。
  2. boolean addAll(Collection c)此方法将指定Collection的所有元素添加到集合中。Collection中的元素应该是同类的,否则将抛出ClassCastException。Collection的重复条目不会添加到TreeSet中。
  3. void clear()此方法将删除所有元素。
  4. boolean contains(Object o)如果TreeSet中存在给定元素,则此方法将返回true,否则返回false。
  5. Object first()如果TreeSet不为null,则此方法将返回TreeSet中的第一个元素,否则将抛出NoSuchElementException。
  6. Object last()如果TreeSet不为null,则此方法将返回TreeSet中的最后一个元素,否则将抛出NoSuchElementException。
  7. SortedSet headSet(Object toElement)此方法将返回TreeSet的元素,这些元素小于指定的元素。
  8. SortedSet tailSet(Object fromElement)此方法将返回TreeSet的元素,这些元素大于或等于指定的元素。
  9. SortedSet subSet(Object fromElement,Object toElement):此方法将返回从fromElement到toElement的元素。fromElement是包含的,toElement是独占的。
  10. boolean isEmpty()如果此set不包含任何元素,则此方法用于返回true;对于相反的情况,此方法用于返回false。
  11. Object clone()该方法用于返回集合的浅表副本,这只是一个简单的复制集合。
  12. int size()此方法用于返回集合的大小或集合中存在的元素数量。
  13. boolean remove(Object o)此方法用于从集合中返回特定元素。
  14. Iterator iterator()返回一个迭代器,用于迭代集合的元素。
  15. Comparator comparator():此方法将返回用于对TreeSet中的元素进行排序的Comparator,如果使用默认的自然排序顺序,它将返回null。

Java中的TreeSet

 
转载请保留页面地址:https://www.breakyizhan.com/java/4902.html
扫描二维码添加微信 
  • ,每次淘宝领取淘宝优惠券,淘宝购物更优惠。现在添加微信,还可以领取机械键盘50元优惠券!添加微信后回复机械键盘即可领取!
    支持我们,就用微信淘宝!