Java中的TreeSet
TreeSet提供了SortedSet接口的一种实现,该接口继承了Set接口。它的行为类似于简单的Set,但与之不同的是,它以排序的形式存储元素。以下是TreeSet的特点。
- TreeSet使用树形数据结构进行存储。
- 对象以升序的方式存储。但我们可以使用TreeSet.descendingIterator()方法迭代降序。
- 访问和检索时间非常快,使TreeSet成为在排序格式下存储大量数据的优选。
- TreeSet不使用hashCode()和equals()方法来比较它的元素。它使用compare()(或compareTo())方法来确定两个元素的相等性。
treeset类的重要方法:
- boolean add(E e): 如果此set中不存在指定的元素,则将指定的元素添加到该set中。
- E ceiling(E e): 如果存在大于或等于给定元素的最小元素,则此方法返回该set中最小的此类元素,否则返回null。
- boolean contains(Object o): 如果此set包含指定的元素,则返回true。
- E floor(E e): 如果存在小于或等于给定元素的最大元素,则此方法返回该set中最大的此类元素,否则返回null。
- E pollFirst(): 检索并删除第一个(最低)元素,如果此set为空,则返回null。
- E pollLast(): 检索并删除最后一个(最高)元素,如果此set为空,则返回null。
- boolean remove(Object o): 如果存在指定的元素,则从该set中删除该元素。
以下是一个非常简单的TreeSet实现,包括TreeSet的排序、TreeSet中的迭代、检索第一个和最后一个元素以及删除元素。
// Java程序演示TreeSet集合的工作原理
import java.util.Iterator;
import java.util.TreeSet;
public class TreeSetExample
{
public static void main(String[] args)
{
TreeSet<Integer> ts = new TreeSet<Integer>();
ts.add(10);
ts.add(61);
ts.add(87);
ts.add(39);
Iterator<Integer> iterator = ts.iterator();
System.out.print("Tree set data: ");
//请注意,最大元素是87,会出现在最后面。
while (iterator.hasNext())
System.out.print(iterator.next() + " ");
System.out.println();
//检查treeSet是否为空。
if (ts.isEmpty())
System.out.print("Tree Set is empty.");
else
System.out.println("Tree Set size: " + ts.size());
//获取集合中最小的元素
System.out.println("First data: " + ts.first());
//获取集合中最大的元素
System.out.println("Last data: " + ts.last());
//从集合中删除61。
if (ts.remove(61))
System.out.println("Data is removed from tree set");
else
System.out.println("Data doesn't exist!");
System.out.print("Now the tree set contain: ");
iterator = ts.iterator();
//显示树集数据
while (iterator.hasNext())
System.out.print(iterator.next() + " ");
System.out.println();
System.out.println("Now the size of tree set: " +
ts.size());
//删除全部
ts.clear();
if (ts.isEmpty())
System.out.print("Tree Set is empty.");
else
System.out.println("Tree Set size: " + ts.size());
}
}
输出:
Tree set data: 10 39 61 87
Tree Set size: 4
First data: 10
Last data: 87
Data is removed from tree set
现在树集包含: 10 39 87
现在树集的大小: 3
Tree Set是空的。