Java TreeSet
类是一个基于TreeMap
的NavigableSet
实现。 元素可以通过Comparator
进行排序,也可以仅通过其自然排序进行排序。 在复杂度方面,此实现为所有基本操作(例如添加,删除,包含)提供了log(n)
时间成本。
关于 Java 中的TreeSet
的重要知识
TreeSet
实现SortedSe
接口,这意味着不允许重复值。- 异构对象不能插入
TreeSet
中,因为它不允许这样做。 它将在运行时引发classCastException
。 TreeSet
类不保留元素的插入顺序,但是元素按其键排序。TreeSet
中的元素以升序和排序顺序存储。
Java 中TreeSet
的局限性
- 值必须是可比较的,或者需要在构造函数中提供比较器
TreeSet
的简单说明
继承图
TreeSet
中的构造方法
TreeSet()
:构造一个新的空树集,并根据其元素的自然顺序进行排序TreeSet(Collection<? extends E> c)
:构造一个新树集,该树集包含指定集合中的元素,并根据其元素的自然顺序对其进行排序。TreeSet(Comparator<? super E> comparator)
:构造一个空树集,该树集根据指定的比较器排序。TreeSet(SortedSet<E> s)
:构造一个与指定集合完全相同的新树集,包括元素的顺序。
TreeSet
中的方法
void add(Object o)
:根据TreeSet
中的某些排序顺序添加指定的元素。 不会添加重复项。void clear()
:从树集中删除所有元素。boolean contains(Object o)
:如果树集中存在给定元素,则返回true
,否则返回false
。Object first()
:返回树集中的第一个元素。Object last()
:返回树集中的最后一个元素。boolean isEmpty()
:如果树集不包含任何元素,则返回true
,否则返回false
。Object clone()
:返回树集的浅表副本。int size()
:返回树集中的元素数量。Iterator iterator()
:返回用于迭代树集元素的迭代器。Comparator comparator()
:返回用于对TreeSet
中的元素进行排序的Comparator
。
有关所有方法的文档,请访问 Oracle 官方文档页面。
使用add()
在TreeSet
中添加元素
语法:treeSet.add(Object o)
import java.io.*;
import java.util.TreeSet;
public class TreeSetExample {
public static void main(String args[])
{
TreeSet<String> animals = new TreeSet<String>();
animals.add("Elephant");
animals.add("Tiger");
animals.add("Lion");
System.out.println("TreeSet: " + animals);
}
}
输出:
TreeSet: [Elephant, Tiger, Lion]
使用first()
和last()
获取TreeSet
的第一个和最后一个元素
语法:
treeSet.first()
treeSet.last()
import java.io.*;
import java.util.TreeSet;
public class TreeSetExample {
public static void main(String args[])
{
TreeSet<String> animals = new TreeSet<String>();
animals.add("Elephant");
animals.add("Tiger");
animals.add("Lion");
System.out.println("TreeSet: " + animals);
System.out.println("The first element: " + animals.first());
System.out.println("The last element: " + animals.last());
}
}
输出:
TreeSet: [Elephant, Tiger, Lion]
The first element: Elephant
The last element: Lion
使用contains()
检查元素是否在树集中
语法:treeSet.contains(Object element)
import java.io.*;
import java.util.TreeSet;
public class TreeSetExample {
public static void main(String args[])
{
TreeSet<String> animals = new TreeSet<String>();
animals.add("Elephant");
animals.add("Tiger");
animals.add("Lion");
System.out.println("TreeSet: " + animals);
System.out.println("Is 'Cat' in the tree set?" + animals.contains("Cat"));
System.out.println("Is 'Lion' in the tree set?" + animals.contains("Lion"));
}
}
输出:
TreeSet: [Elephant, Tiger, Lion]
Is 'Cat' in the tree set? false
Is 'Lion' in the tree set? true
使用remove()
从树集中删除一个元素
语法:treeSet.remove(Object o)
import java.io.*;
import java.util.TreeSet;
public class TreeSetExample {
public static void main(String args[])
{
TreeSet<String> animals = new TreeSet<String>();
animals.add("Elephant");
animals.add("Tiger");
animals.add("Lion");
System.out.println("TreeSet: " + animals);
animals.remove("Lion");
animals.remove("Elephant");
System.out.println("TreeSet: " + animals);
}
}
输出:
TreeSet: [Elephant, Tiger, Lion]
TreeSet: [Tiger]
使用size()
获取树集中的元素数量
语法:treeSet.size()
import java.util.*;
import java.util.TreeSet;
public class TreeSetExample {
public static void main(String args[])
{
TreeSet<String> animals = new TreeSet<String>();
animals.add("Elephant");
animals.add("Tiger");
animals.add("Lion");
System.out.println("TreeSet: " + animals);
System.out.println("The size of the tree set is: " + animals.size());
}
}
输出:
TreeSet: [Elephant, Tiger, Lion]
The size of the tree set is: 3
使用isEmpty()
检查树集是否为空
语法:treeSet.isEmpty()
import java.util.*;
import java.util.TreeSet;
public class TreeSetExample {
public static void main(String args[])
{
TreeSet<String> animals = new TreeSet<String>();
animals.add("Elephant");
animals.add("Tiger");
animals.add("Lion");
System.out.println("TreeSet: " + animals);
System.out.println("Empty: " + animals.isEmpty());
animals.clear();
System.out.println("Empty: " + animals.isEmpty());
}
}
输出:
TreeSet: [Elephant, Tiger, Lion]
Empty: false
Empty: true
使用Iterator()
遍历树集
语法:
Iterator iterator = ts.iterator();
while (iterator.hasNext())
System.out.print(iterator.next());
import java.util.Iterator;
import java.util.TreeSet;
public class TreeSetExample {
public static void main(String[] args)
{
TreeSet<String>
animals = new TreeSet<String>();
animals.add("Elephant");
animals.add("Tiger");
animals.add("Lion");
Iterator<String> iterator = animals.iterator();
System.out.println("TreeSet: ");
System.out.println();
while (iterator.hasNext())
System.out.print(iterator.next()
+ "\n");
}
}
输出:
TreeSet:
Elephant
Tiger
Lion
使用增强的for
循环遍历树集
语法:
for (String animal : animals)
System.out.print(animal);
}
import java.util.Iterator;
import java.util.TreeSet;
public class TreeSetExample {
public static void main(String[] args)
{
TreeSet<String>
animals = new TreeSet<String>();
animals.add("Elephant");
animals.add("Tiger");
animals.add("Lion");
System.out.println("TreeSet: ");
System.out.println();
for (String animal : animals)
System.out.print(animal + "\n");
}
}
输出:
TreeSet:
Elephant
Tiger
Lion