目录
平衡二叉查找树——红黑树:
案例一:treeSet集合的常见使用方法
package com.collection;
import java.util.Iterator;
import java.util.TreeSet;
/**
* TreeSet的使用
* 存储结构:红黑树
*/
public class Demo09 {
public static void main(String[] args) {
//1创建集合
TreeSet<String> treeSet = new TreeSet<>();
treeSet.add("xyz");
treeSet.add("abc");
treeSet.add("hello");
treeSet.add("xyz");
System.out.println("元素个数:"+treeSet.size());
System.out.println(treeSet.toString());
//2删除数据
treeSet.remove("xyz");
//3遍历
System.out.println("-----增强for-------");
for(String str : treeSet) {
System.out.println(str);
}
System.out.println("-----使用迭代器-------");
Iterator<String> iterator = treeSet.iterator(); //方法的返回值为Iterator
while(iterator.hasNext()) {
System.out.println(iterator.next());
}
//判断
System.out.println(treeSet.contains("香蕉"));
System.out.println(treeSet.isEmpty());
}
}
结果:
案例二:treeSet存储类的对象时,需要实现接口
如果不实现接口,会出现类型转换异常:
结果显示Person类不能转为java.lang.Comparable:
这是因为TreeSet是红黑树,实际上就是二叉查找树。二叉查找树的要求是左边的节点都比右边的节点要小。现在需要存放的是Person的对象,程序不知道怎么比较,才能满足二叉查找树的要求。所以,要想把Person对象添加到TreeSet集合当中,必须要在Person类中实现Comparable接口。实现接口就必须要重写接口中的方法。Comparable接口只有compareTo一个方法。
重写之后运行的结果,可以正常输出了:
案例三:Comparator接口
在创建TreeSet实例时,可以使用带Comparator参数的方法,不需要再到实例类中实现Comparable接口。在创建集合时就指定比较规则了:
结果显示,实现了对字符串的排序: