以下是从百度引用过来的:
由于TreeMap需要排序,所以需要一个Comparator为键值进行大小比较.当然也是用Comparator定位的.
a. Comparator可以在创建TreeMap时指定
b. 如果创建时没有确定,那么就会使用key.compareTo()方法,这就要求key必须实现Comparable接口.
c. TreeMap是使用Tree搜索数据结构实现的,所以使用compare接口就可以完成定位了.
那么我们在使用Comparable接口时在某些情况下TreeSet数据会变少,这是什么原因产生的呢?
public int compareTo(Object arg0) {
Resource res = (Resource) arg0;
return this. seq – res. seq;
}
上面代码是最简单的compareTo实现方法,但是有时间将list中的数据放入treeset时,数据会丢失部分。
经过分析发现是因为treeset在调用compareTo时如果返回值为0,treeset就会认为比较的两个对象是同一个对象,从而丢弃掉一个对象。优化后的代码如下:
public int compareTo(Object arg0) {
Resource res = (Resource) arg0;
if ( this. seq != res. seq) {
return this. seq – res. seq;
} else {
return this. id.compareTo(res. id);
}
}
代码修改后会拿Resource对象的唯一值id进行比较,这样就能保证不同的对象id值永远不会相同,也就不会丢弃对象了。
>>> Hello World <<<
这篇内容是否帮助到你了呢?
如果你有任何疑问或有建议留给其他朋友,都可以给我留言。