TreeMap不仅实现了Map接口,还实现了Map接口的子接口java.util.SortedMap,由treeMap实现的map集合,不允许key值为null,因为集合中的映像关系是按照key来按一定顺序排列的,treeMap通过实现SortedMap得到下面几个方法:
public static voidmain(String[] args) {
//不指定排序器
TreeMap treeMap1 = new TreeMap();
treeMap1.put("2", "1");
treeMap1.put("b", "1");
treeMap1.put("1", "1");
treeMap1.put("a", "1");
System.out.println("treeMap1="+treeMap1);
//指定排序器
TreeMap treeMap2 = new TreeMap(newComparator(){
public intcompare(String o1, String o2) {
//指定排序器按照降序排列
returno2.compareTo(o1);
}
});
treeMap2.put("2", "1");
treeMap2.put("b", "1");
treeMap2.put("1", "1");
treeMap2.put("a", "1");
System.out.println("treeMap2="+treeMap2);
}
comparator:获得该集合采用的比较器,返回类型为Comparator,没有则返回null;
fisrtkey:返回排序位于第一位的key对象
lastkey:返回集合中位于最后一位的key对象
headKey(KtoKey):截取集合中在toKey对象之前的(不包含)所有的映射关系,重新生成一个SortedMap并返回
subKey(K fromKey,KtoKey):截取集合中排序位于fromKey(包含)和toKey(不包含)的所有映像关系,重新生成一个SortedMap并返回
tailKey(KfromKey):截取集合中排序位于fromKey(包含)以后的所有映像关系,重新生成一个SortedMap返回
在添加,删除,定位映像关系上treeMap要比hashMap差些,但其映像关系有一定的顺序,就看你在什么语境下使用了,有排序需求是treeMap自然要好些
TreeMap是基于红黑树的,至于红黑树是什么,自行补脑,查看key或(key,value)时会排序的(次序由Comparable或Comparator决定),他的特点就是得到的结果是经过排序的,treeMap是唯一一个带有subMap()的map,返回一个子树。
Comparable接口:
- public interface Comparable{
-
public int compareTo(To) - }
Comparator接口:
- public interface Comparator {
- int compare(T o1, T o2);
- boolean equals(Objectobject);
- }
这里要注意的是TreeMap按照key来排序,所以put进来重复的key,那么直接替换掉old value,并返回oldvalue
- public V setValue(V value){
-
V oldValue =this.value; -
this.value =value; -
return oldValue; -
}
这里要说明一点TreeSet(前面有一个Qunar大连的笔试题的例子),treeSet的tree中的值改变之后并不会重新排序,在这里排序是按照key来排序的,value改变后所以直接替换点value,tree并不需要重新排序的
TreeMap还继承了NavigableMap,NavigableMap拓展的SortedMap具有针对给定目标返回最接近匹配项的方法。方法lowerEntry、floorEntry、ceilingEntry和higherEntry分别返回与小于、小于等于、大于等于、大于给定键的键关联的Map.Entry对象,如果不存在这样的键,则返回null。类似地,方法lowerKey、floorKey、ceilingKey和higherKey只返回关联的键,这些方法都是查找操作。
至于这课红黑树的构造和添加删除操作,我艹,代码量太大了,懒得贴了,上述就是一些treeMap的我觉得有用的tips
不对的请指正!!
贴一段按照key来排序的代码
import java.util.Comparator;
import java.util.TreeMap;
public class TestTreeMap {
}
}
妈蛋
新浪blog不会贴源码,最下面那个大概意思对,但它一些参数去除了,凑合看吧
我去学学怎么贴源码