TreeMap
- 构造器把传入的实现了Comparator接口的匿名内部类(对象),传给TreeMap的comparator属性,可以借助匿名内部类重写compare方法,以定义排序方式
- 如果遍历过程中发现准备添加key和已有key相等,就不添加key,但会替换value
package aggregate.map;
import java.util.Comparator;
import java.util.TreeMap;
public class TreeMap_ {
public static void main(String[] args) {
TreeMap treeMap = new TreeMap(new Comparator() {
@Override
public int compare(Object o1, Object o2) {
return ((String) o1).compareTo((String) o2);
}
});
treeMap.put("mary","玛丽");
treeMap.put("jack","杰克");
treeMap.put("tom","汤姆");
treeMap.put("mary","玛丽");
System.out.println(treeMap);
/*
1.构造器,把传入的实现了Comparator接口的匿名内部类(对象),传给TreeMap的comparator属性
public TreeMap(Comparator<? super K> comparator) {
this.comparator = comparator;
}
2.调用put方法
2.1 第一次添加,将k-v封装到Entry对象,放入root
Entry<K,V> t = root;
if (t == null) {
compare(key, key); // type (and possibly null) check
root = new Entry<>(key, value, null);
size = 1;
modCount++;
return null;
}
2.2 之后添加元素,遍历所有元素,并进行比对
Comparator<? super K> cpr = comparator;
if (cpr != null) {
do { //遍历所有的key
parent = t;
cmp = cpr.compare(key, t.key); //动态绑定到我们的匿名内部类compare
if (cmp < 0)
t = t.left;
else if (cmp > 0)
t = t.right;
else //如果遍历过程中发现准备添加key和已有key相等,就不添加key,但会替换value
return t.setValue(value);
} while (t != null);
}
*/
}
}