今儿来说说treeMap吧

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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值