今儿来说说treeMap吧

来源:互联网 发布:大智慧交易软件 编辑:程序博客网 时间:2024/05/17 23:51
TreeMap不仅实现了Map接口,还实现了Map接口的子接口java.util.SortedMap,由treeMap实现的map集合,不允许key值为null,因为集合中的映像关系是按照key来按一定顺序排列的,treeMap通过实现SortedMap得到下面几个方法:
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接口:
  1. public interface Comparable{
  2.      public int compareTo(To)
  3. }
Comparator接口:
  1. public interface Comparator {
  2. int compare(T o1, T o2);
  3. boolean equals(Objectobject);
  4. }

这里要注意的是TreeMap按照key来排序,所以put进来重复的key,那么直接替换掉old value,并返回oldvalue
  1. public V setValue(V value){
  2.           V oldValue =this.value;
  3.           this.value =value;
  4.           return oldValue;
  5.       }
这里要说明一点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 {
    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);
    }
}
}

妈蛋  新浪blog不会贴源码,最下面那个大概意思对,但它一些参数去除了,凑合看吧   我去学学怎么贴源码









0 0
原创粉丝点击