java TreeSet是如何添加不重复元素的
compare()
方法很重要。
当TreeSet
指定了比较器,或对象实现了Comparable
接口时。实际上找的是compare
方法。与equals
无关。
public class TimeComparator implements Comparator<Node> {
//时间从小到大排序
@Override
public int compare(Node o1, Node o2) {
if(o1.equals(o2)){
return 0;
}
if (o1.getData().getTime() - o2.getData().getTime() < 0) {
return -1;
} else if (o1.getData().getTime() - o2.getData().getTime() > 0) {
return 1;
}else{
return o1.getName().compareTo(o2.getName()); //*1*
}
/*比较器return的说明:一定不能在else中return -1,1等确定的值。会当成return 0处理。表示相等,不再循环找*/
}
}
说明:*1*
行中,一定不能return
-1,1,也不能return 0。如果确实除了前边的是相等的,那就return 0
.
在set放元素时,是一个循环比较的过程,一旦有一个相等,就不再比较。