Person是比较器的类型参数,Worker是TreeSet的类型参数,Person是Worker的父类,所以没毛病
treeset实现了sortedset接口,也就是重写了里面的方法,但具体实现的方式由实现的子类自己编写,所以treeset在实现set集合采用的算法是树型算法。
TreeSet是一个有序集合,TreeSet中的元素将按照升序排列,缺省是按照自然排序进行排列,意味着TreeSet中的元素要实现Comparable接口。或者有一个自定义的比较器。Treeset算法:
构造一个新的空TreeSet,它根据指定比较器进行排序。插入到该 set 的所有元素都必须能够由指定比较器进行相互比较:对于 set 中的任意两个元素 e1 和e2,执行 comparator.compare(e1, e2) 都不得抛出 ClassCastException。如果用户试图将违反此约束的元素添加到 set 中,则 add 调用将抛出 ClassCastException。package test.treeset
import java.util.Comparator
import java.util.Iterator
import java.util.TreeSet
public class TreeSetTest {
@SuppressWarnings("unchecked")
public static void main(String[] args) {
TreeSet ts = new TreeSet(new Teacher2.TeacherCompare())
ts.add(new Teacher2("zhangsan", 2))
ts.add(new Teacher2("lisi", 1))
ts.add(new Teacher2("wangmazi", 3))
ts.add(new Teacher2("mazi", 3))
Iterator it = ts.iterator()
while (it.hasNext()) {
System.out.println(it.next())
}
}
}
class Teacher2 {
int num
String name
Teacher2(String name, int num) {
this.num = num
this.name = name
}
public String toString() {
return "学号:" + num + " 姓名:" + name
}
static class TeacherCompare implements Comparator {// 老师自带的一个比较器
//o1中存放的事目标节点
//o2中存放时的红黑二叉树中的节点,从根节点开始比较
public int compare(Object o1, Object o2) {
Teacher2 s1 = (Teacher2) o1// 转型
Teacher2 s2 = (Teacher2) o2// 转型
int result = s1.num > s2.num ? 1 : (s1.num == s2.num ? 0 : -1)
if (result == 0) {
result = s1.name.compareTo(s2.name)
}
return result
}
}
}
TreeSet是一个有序集合,其元素按照升序排列。默认是按照自然顺序排列,也就是说TreeSet中的对象元素需要实现Comparable接口。