1、TreeMap介绍

前言

使用场景:

那如果我们在一个对查找性能要求不那么高,反而对有序性要求比较高的应用场景

这个时候HashMap就不再适用了,我们需要一种新的Map,TreeMap.
HahMap是Key无序的,而TreeMap是Key有序的。

1、观察下大概的源码

1、TreeMap继承了NavigableMap,而NavigableMap继承自SortedMap,为SortedMap添加了搜索选项
2、NavigableMap有几种方法,分别是不同的比较要求:floorKey是小于等于,ceilingKey是大于等于,lowerKey是小于,higherKey是大于。
3、注意初始化的时候,有一个Comparator成员,这是用于维持有序的比较器,当我们想做一个自定义数据结构的TreeMap时,可以重写这个比较器

public class TreeMap<K,V>
    extends AbstractMap<K,V>
    implements NavigableMap<K,V>, Cloneable, java.io.Serializable
{
    private final Comparator<? super K> comparator;
    private transient Entry<K,V> root = null;
    private transient int size = 0;
    private transient int modCount = 0;
    public TreeMap() {
        comparator = null;
    }    
    public TreeMap(Comparator<? super K> comparator) {
        this.comparator = comparator;
    }
    //后面省略
}

2、在和优酷接口进行对接的时候用到

https://doc.open.youku.com/?docid=317#anchort4

将所有请求参数按照字母先后顺序排序,自动根据key的字母顺序排序,非常牛

TreeMap treeMap = new TreeMap();

treeMap.put("idfa",idfa);
treeMap.put("appid",appid);
treeMap.put("action",action);
treeMap.put("client_id",client_id);
treeMap.put("timestamp",timestamp);
treeMap.put("version",version);
treeMap.put("ip",ip);
treeMap.put("company_name",company_name);

3、顺序和逆序

3.1、逆序排列 (普通的Map)

重点如下
    Map<Long, Long> tMapRever = new TreeMap<>(Collections.reverseOrder());
    tMapRever.putAll(getStartIdAndEndId(31L,3L));




public static Map<Long,Long> getStartIdAndEndId(Long count, Long fenduan){
    Map<Long,Long> map = new HashMap<>();
    Long num = count / fenduan;
    Long yushu = count % fenduan;

    for (int i = 1; i <= num; i++) {
        map.put((i - 1) * fenduan + 1, i * fenduan);
    }

    Long yushufinal = num * fenduan + yushu;
    map.put(num * fenduan + 1, yushufinal);

    return map ;
}


public static void main(String[] args) {



    Map<Long, Long> tMapRever = new TreeMap<>(Collections.reverseOrder());
    tMapRever.putAll(getStartIdAndEndId(31L,3L));



    for(Long key :tMapRever.keySet() ){
         System.out.println("key:"+key+":"+tMapRever.get(key));
    }
}







如果满意,请打赏博主任意金额,感兴趣的请下方留言吧。可与博主自由讨论哦

支付包 微信 微信公众号
支付宝 微信 微信公众号
posted @ 2018-08-09 11:55  HealerJean  阅读(210)  评论(0编辑  收藏  举报