Java 集合框架TreeSet

原文:https://www.studytonight.com/java/treeset-in-collection-framework.php

用于以升序存储唯一元素的 TreeSet 类。它类似于 HashSet ,只是它按照升序对元素进行排序,而 HashSet 不维护任何顺序。

Java TreeSet 类实现 Set 接口,使用基于树的数据结构存储。它扩展了AbstractSet类并实现了导航集接口。该类的声明如下。

TreeSet类声明

public class TreeSet<E>extends AbstractSet<E>implements NavigableSet<E>, Cloneable, Serializable

要点

  1. 它以升序存储元素。
  2. 它使用树形结构来存储元素。
  3. 它只包含像 HashSet 这样的独特元素。
  4. 它的存取和检索时间相当快。
  5. 它不允许空元素。
  6. 它是非同步的。

TreeSet合构造器

  TreeSet()
TreeSet( Collection C )  
TreeSet( Comparator comp )
TreeSet( SortedSet ss )

示例:创建TreeSet

让我们创建一个存储字符串元素的TreeSet。这里的集合是空的,因为我们没有给它添加元素。

  import java.util.*;
class Demo
{
  public static void main(String[] args)
  {   
    // Creating an TreeSet
    TreeSet< String> fruits = new TreeSet< String>();

    // Displaying TreeSet
    System.out.println(fruits);
  }
}

[]

TreeSet方法

| 方法 | 描述 | | boolean add(E) | 如果指定的元素不存在,它会将该元素添加到该集合中。 | | 布尔地址(集合 extends E> c) | 它将指定集合中的所有元素添加到该集合中。 | | 上限 | 它返回集合中指定元素的相等或最接近的最大元素,如果没有这样的元素,则返回 null。 | | Comparator super E>Comparator() | 它返回按顺序排列元素的Comparator。 | | 迭代器后代迭代器() | 它用于按降序迭代元素。 | | 导航集下降集() | 它以相反的顺序返回元素。 | | 东楼 | 它返回集合中指定元素的相等或最接近的最小元素,如果没有这样的元素,则返回 null。 | | sortedset 耳机(E toElement) | 它返回小于指定元素的元素组。 | | 导航设置耳机(E toElement,含布尔值) | 它返回小于或等于指定元素的元素组(如果为真,则为包含)。 | | 更高 | 它返回集合中指定元素最接近的最大元素,如果没有这样的元素,则返回 null。 | | 迭代器迭代器() | 它用于以升序迭代元素。 | | 更低 | 它从集合中返回指定元素中最接近的最小元素,如果没有这样的元素,则返回 null。 | | 第一次民意测验 | 它用于检索和移除最低(第一个)元素。 | | 和 pollLast() | 它用于检索和移除最高(最后)元素。 | | 拆分器拆分器() | 它用于在元素上创建后期绑定和故障快速拆分器。 | | 导航集合子集(从元素,布尔从包含,从元素,布尔到包含) | 它返回一组位于给定范围之间的元素。 | | 排序集合子集(从元素到元素) | 它返回一组位于给定范围内的元素,包括 fromElement 和排除 toElement。 | | 排序集尾集 | 它返回一组大于或等于指定元素的元素。 | | 导航集尾集(E fromElement,含布尔值) | 它返回一组大于或等于指定元素的元素(如果为真,则为包含)。 | | 布尔包含(对象 0) | 如果该集合包含指定的元素,则返回 true。 | | boolean isEmpty() | 如果该集合不包含任何元素,则返回 true。 | | 布尔删除(对象 0) | 它用于从该集合中移除指定的元素(如果存在)。 | | 清空() | 它用于从此集合中移除所有元素。 | | 对象克隆() | 它返回这个 TreeSet 实例的一个浅拷贝。 | | e 第一次() | 它返回当前排序集中的第一个(最低的)元素。 | | e 最后() | 它返回当前排序集中的最后一个(最高的)元素。 | | int 大小() | 它返回该集合中的元素数量。 |

TreeSet中添加元素

让我们举一个例子来创建一个包含重复元素的TreeSet。但是您可以注意到它打印独特的元素,这意味着它不允许重复的元素。

import java.util.*;
class Demo{
  public static void main(String args[]){
    TreeSet<String> al=new TreeSet<String>();
    al.add("Ravi");
    al.add("Vijay");
    al.add("Ravi");
    al.add("Ajay");

    Iterator itr=al.iterator();
    while(itr.hasNext()){
      System.out.println(itr.next());
    }
  }
}

Ajay Ravi Vijay

TreeSet中移除元素

我们可以用这个类的remove()方法去掉元素。见下面的例子。

  import java.util.*;
class Demo{
  public static void main(String args[]){
    TreeSet<String> al = new TreeSet<String>();
    al.add("Ravi");
    al.add("Vijay");
    al.add("Ravi");
    al.add("Ajay");

    Iterator itr=al.iterator();
    while(itr.hasNext()){
      System.out.println(itr.next());
    }

    al.remove("Ravi");
    System.out.println("After Removing: "+al);
  }
}

移除后的 Ajay Ravi Vijay:[Ajay,Vijay]

TreeSet中搜索元素

TreeSet 提供了contains()方法,如果集合中存在元素,则该方法为真。

  import java.util.*;
class Demo{
  public static void main(String args[]){
    TreeSet<String> al = new TreeSet<String>();
    al.add("Ravi");
    al.add("Vijay");
    al.add("Ravi");
    al.add("Ajay");

    Iterator itr=al.iterator();
    while(itr.hasNext()){
      System.out.println(itr.next());
    }

    boolean iscontain = al.contains("Ravi");
    System.out.println("Is contain Ravi: "+iscontain);
  }
}

阿杰·拉维·维贾伊是遏制拉维:真的

以升序和降序遍历TreeSet

我们可以按升序和降序遍历TreeSet合的元素。TreeSet 提供descendingIterator()方法,返回迭代器类型进行降序遍历。见下面的例子。

  import java.util.*;
class Demo{
  public static void main(String args[]){
    TreeSet<String> al = new TreeSet<String>();
    al.add("Ravi");
    al.add("Vijay");
    al.add("Ravi");
    al.add("Ajay");
    System.out.println("Ascending...");
    Iterator itr=al.iterator();
    while(itr.hasNext()){
      System.out.println(itr.next());
    }
    System.out.println("Descending...");
    Iterator itr2=al.descendingIterator();
    while(itr2.hasNext()){
      System.out.println(itr2.next());
    }
  }
}

上升的...Ajay Ravi Vijay 下行...Vijay Ravi Ajay