Java TreeSet

1 什么是Java TreeSet

Java TreeSet类实现了Set接口,TreeSet接口使用树结构进行存储。TreeSet继承了AbstractSet类并实现了NavigableSet接口。TreeSet类的对象以升序方式存储。

关于Java TreeSet类的核心要点是:

  • Java TreeSet类不能存储重复元素,和HashSet相似。
  • Java TreeSet类的访问和检索时间快。
  • Java TreeSet类不允许使用Null元素。
  • Java TreeSet类是非同步(线程不安全的)。
  • Java TreeSet类元素是升序的。

2 Java TreeSet的层次结构

如上图所示,Java TreeSet类实现了NavigableSet接口。NavigableSet接口按层次结构顺序继承了SortedSet,Set,Collection和Iterable接口。

3 Java TreeSet的语法

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

4 Java TreeSet的构造方法

构造方法 描述
TreeSet() 用于构造一个空Treeset,该TreeSet将根据自然顺序以升序排序。
TreeSet(Collection<? extends E> c) 用于构建包含集合的元素的新TreeSet。
TreeSet(Comparator<? super E> comparator) 用于构造一个空TreeSet,该TreeSet将根据给定的比较器进行排序。
TreeSet(SortedSet<E> s) 用于构建包含给定SortedSet元素的TreeSet。

5 Java TreeSet的方法

方法 描述
boolean add(E e) 如果指定的元素不存在,则将元素添加到集合中。
boolean addAll(Collection<? extends E> c) 如果指定的元素不存在,则将元素添加到集合中。
E ceiling(E e) 从集合中返回指定元素的相等或最接近的最大元素,如果没有,则返回null。
Comparator<? super E> comparator() 返回按顺序排列元素的比较器。
Iterator descendingIterator() 用于按降序迭代元素。
NavigableSet descendingSet() 以相反的顺序返回元素。
E floor(E e) 返回集合中指定元素的等于或最接近的最小元素,如果没有,则返回null。
SortedSet headSet(E toElement) 返回小于指定元素的元素组。
NavigableSet headSet(E toElement, boolean inclusive) 返回小于或等于(如果包含,则为true)指定元素的元素组。
E higher(E e) 从集合中返回指定元素中最接近的最大元素,如果没有,则返回null。
Iterator iterator() 用于按升序迭代元素。
E lower(E e) 从集合中返回指定元素中最接近的最小元素,如果没有,则返回null。
E pollFirst() 用于检索和删除最小(第一个)元素。
E pollLast() 用于检索和删除最大(最后)元素。
Spliterator spliterator() 用于在元素上创建后绑定和故障快速拆分器(Spliterator)。
NavigableSet subSet(E fromElement, boolean fromInclusive, E toElement, boolean toInclusive) 返回位于给定范围之间的一组元素。
SortedSet subSet(E fromElement, E toElement) 返回位于给定范围(包括fromElement和不包括toElement)之间的一组元素。
SortedSet tailSet(E fromElement) 返回一组大于或等于指定元素的元素。
NavigableSet tailSet(E fromElement, boolean inclusive) 返回一组大于或等于(如果包含,则为true)指定元素的元素。
boolean contains(Object o) 如果集合包含指定的元素,则返回true。
boolean isEmpty() 如果集合不包含任何元素,则返回true。
boolean remove(Object o) 如果存在指定元素,则用于从集合中删除该元素。
void clear() 用于删除集合中的所有元素。
Object clone() 返回此TreeSet实例的浅表副本。
E first() 返回TreeSet中当前的第一个(最低)元素。
E last() 返回TreeSet中当前的最后一个(最高)元素。
int size() 返回集合中的元素个数。

6 Java TreeSet示例1

package com.yiidian;

/**
 * 一点教程网: http://www.yiidian.com
 */
/**
 * Java TreeSet的例子
 */
import java.util.*;

class Demo{

    public static void main(String args[]){
        //创建TreeSet并添加元素
        TreeSet<String> al=new TreeSet<String>();
        al.add("Eric");
        al.add("Jack");
        al.add("Rose");
        al.add("Mark");
        //遍历元素
        Iterator<String> itr=al.iterator();
        while(itr.hasNext()){
            System.out.println(itr.next());
        }
    }
}

输出结果为:

Eric
Jack
Mark
Rose

7 Java TreeSet示例2

让我们看一个以降序遍历元素的示例。

package com.yiidian;

/**
 * 一点教程网: http://www.yiidian.com
 */
/**
 * Java TreeSet的例子
 */
import java.util.*;

class Demo{

    public static void main(String args[]){
        TreeSet<String> set=new TreeSet<String>();
        set.add("Eric");
        set.add("Jack");
        set.add("Rose");
        System.out.println("倒序排序TreeSet:");
        Iterator i=set.descendingIterator();
        while(i.hasNext())
        {
            System.out.println(i.next());
        }

    }
}

输出结果为:

倒序排序TreeSet:
Rose
Jack
Eric

8 Java TreeSet示例3

让我们看一个示例来检索和删除最高和最低值。

package com.yiidian;

/**
 * 一点教程网: http://www.yiidian.com
 */
/**
 * Java TreeSet的例子
 */
import java.util.*;

class Demo{

    public static void main(String args[]){
        TreeSet<Integer> set=new TreeSet<Integer>();
        set.add(24);
        set.add(66);
        set.add(12);
        set.add(15);
        System.out.println("最大值: "+set.pollFirst());
        System.out.println("最小值: "+set.pollLast());
}
}

输出结果为:

栈顶值: 12
栈底: 66

9 Java TreeSet示例4

在此示例中,执行各种NavigableSet操作。

package com.yiidian;

/**
 * 一点教程网: http://www.yiidian.com
 */
/**
 * Java TreeSet的例子
 */
import java.util.*;

class TreeSet4{

    public static void main(String args[]){
        TreeSet<String> set=new TreeSet<String>();
        set.add("A");
        set.add("B");
        set.add("C");
        set.add("D");
        set.add("E");
        System.out.println("初始化TreeSet: "+set);

        System.out.println("反转TreeSet: "+set.descendingSet());

        System.out.println("headSet方法: "+set.headSet("C", true));

        System.out.println("subSet方法: "+set.subSet("A", false, "E", true));

        System.out.println("tailSet方法: "+set.tailSet("C", false));
    }
}

输出结果为:

初始化TreeSet: [A, B, C, D, E]
反转TreeSet: [E, D, C, B, A]
headSet方法: [A, B, C]
subSet方法: [B, C, D, E]
tailSet方法: [D, E]

10 Java TreeSet示例5

在此示例中,执行各种SortedSetSet操作。

package com.yiidian;

/**
 * 一点教程网: http://www.yiidian.com
 */
/**
 * Java TreeSet的例子
 */
import java.util.*;

class Demo{

    public static void main(String args[]){
        TreeSet<String> set=new TreeSet<String>();
        set.add("A");
        set.add("B");
        set.add("C");
        set.add("D");
        set.add("E");

        System.out.println("初始化TreeSet: "+set);

        System.out.println("headSet方法: "+set.headSet("C"));

        System.out.println("subSet方法: "+set.subSet("A", "E"));

        System.out.println("tailSet方法: "+set.tailSet("C"));
    }
}

输出结果为:

初始化TreeSet: [A, B, C, D, E]
headSet方法: [A, B]
subSet方法: [A, B, C, D]
tailSet方法: [C, D, E]

 

推荐好课