应该输出:lisi02.....17
lisi01.....20
lisi04.....20
lisi03.....21
但是只输出了:lisi02.....17
这是什么原因?
import java.util.Comparator;
import java.util.Iterator;
import java.util.TreeSet;
public class TreeSetDemo2 {
/**
*在TreeSet排序中一共有两种: 第一种就是集合自身具有比较性, 实现Comparable接口覆写compareTo方法
*
*第二种就是自定义比较器 当集合已经有排序功能,但是不符合项目的需求,
* 那么这时就要自定义自己的比较器,实现Comparator接口,覆写compare方法,把自定义 比较器,传到TreeSet的构造器中
*/
public static void main(String[] args) {
TreeSet ts = new TreeSet();
ts.add(new Worker("lisi01",20));
ts.add(new Worker("lisi02",17));
ts.add(new Worker("lisi03",21));
ts.add(new Worker("lisi04",20));
Iterator it = ts.iterator();
if (it.hasNext()) {
Worker w = (Worker) it.next();
System.out.println(w.getName() + ":" + w.getAge());
}
}
}
class Worker implements Comparable {// 该接口强制让工人对象具备比较性
private String name;
private int age;
Worker(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
@Override
public int compareTo(Object o) {
if (!(o instanceof Worker)) // 对输入的对象进行判断是否是Work对象
throw new RuntimeException("不是工人对象"); // 如果不是则抛出异常
Worker w = (Worker) o;
if (this.age > w.age)
return 1;
if (this.age == w.age)
return this.name.compareTo(w.name);// 当主要条件满足时,比较次要条件,使用字符串的compareTo方法*/
return -1;
}
}
|