深入理解TreeMap

简要介绍

  • TreeMap 是一个有序的key-value集合,它是通过红黑树实现的。
  • TreeMap 继承于AbstractMap,所以它是一个Map,即一个key-value集合。
  • TreeMap 实现了NavigableMap接口,意味着它支持一系列的导航方法。比如返回有序的key集合。
  • TreeMap 实现了Cloneable接口,意味着它能被克隆。
  • TreeMap 实现了java.io.Serializable接口,意味着它支持序列化。
  • TreeMap基于红黑树(Red-Black tree)实现。该映射根据其键的自然顺序进行排序,或者根据创建映射时提供的
    Comparator 进行排序,具体取决于使用的构造方法。
  • TreeMap的基本操作 containsKey、get、put 和 remove 的时间复杂度是 log(n) 。
    另外,TreeMap是非同步的。 它的iterator 方法返回的迭代器是fail-fastl的。

源码

使用

public static void main(String[] args) {
        TreeMap<String, String> treeMap = new TreeMap<String,String>();
        treeMap.put("1", "1");
        treeMap.put("2", "2");
        treeMap.put("3", "3");
        treeMap.put("4", "4");
        treeMap.put("5", "5");
        treeMap.put("6", "6");
        treeMap.put("7", "7");
        System.out.println("treeMap:"+treeMap);
        System.out.println("treeMap.get(1):"+treeMap.get("1"));
        System.out.println("treeMap.get(2):"+treeMap.get("2"));
        System.out.println("treeMap.isEmpty():"+treeMap.isEmpty());
        System.out.println("treeMap.containsKey(2):"+treeMap.containsKey("3"));
        System.out.println("treeMap.keySet():"+treeMap.keySet());
        System.out.println("treeMap.entrySet():"+treeMap.entrySet());
        System.out.println("treeMap.size():"+treeMap.size());
        System.out.println("treeMap.firstEntry():"+treeMap.firstEntry());
        System.out.println("treeMap.lastEntry():"+treeMap.lastEntry());
        System.out.println("treeMap.ceilingEntry(3):"+treeMap.ceilingEntry("3"));
        System.out.println("treeMap.floorKey(3):"+treeMap.floorKey("3"));
        System.out.println("treeMap.higherKey(2):"+treeMap.higherKey("2"));
        System.out.println("treeMap.lowerEntry(2):"+treeMap.lowerEntry("2"));
        System.out.println("treeMap.replace(2, 8):"+treeMap.replace("2", "8"));
        System.out.println("treeMap.descendingMap():"+treeMap.descendingMap());
        System.out.println("treeMap.navigableKeySet():"+treeMap.navigableKeySet());
        System.out.println("treeMap.headMap(3):"+treeMap.headMap("3"));
        System.out.println("treeMap.tailMap(3):"+treeMap.tailMap("3"));

        System.out.println("迭代器遍历");
        Iterator<String> strItr = treeMap.keySet().iterator();
        while(strItr.hasNext()){
            System.out.println(treeMap.get(strItr.next()));
        }
    }

/***********************打印结果*********************************
treeMap:{1=1, 2=2, 3=3, 4=4, 5=5, 6=6, 7=7}
treeMap.get(1):1
treeMap.get(2):2
treeMap.isEmpty():false
treeMap.containsKey(2):true
treeMap.keySet():[1, 2, 3, 4, 5, 6, 7]
treeMap.entrySet():[1=1, 2=2, 3=3, 4=4, 5=5, 6=6, 7=7]
treeMap.size():7
treeMap.firstEntry():1=1
treeMap.lastEntry():7=7
treeMap.ceilingEntry(3):3=3
treeMap.floorKey(3):3
treeMap.higherKey(2):3
treeMap.lowerEntry(2):1=1
treeMap.replace(2, 8):2
treeMap.descendingMap():{7=7, 6=6, 5=5, 4=4, 3=3, 2=8, 1=1}
treeMap.navigableKeySet():[1, 2, 3, 4, 5, 6, 7]
treeMap.headMap(3):{1=1, 2=8}
treeMap.tailMap(3):{3=3, 4=4, 5=5, 6=6, 7=7}
迭代器遍历
1
8
3
4
5
6
7
************************************************************/

重点总结

1.由于TreeMap中的元素是从小到大的顺序排列的。因此,顺序遍历,就是从第一个元素开始,逐个向后遍历;而倒序遍历则恰恰相反,它是从最后一个元素开始,逐个往前遍历。

2.TreeMap基于红黑树(Red-Black tree)实现。该映射根据其键的自然顺序进行排序,或者根据创建映射时提供的 Comparator 进行排序,具体取决于使用的构造方法。

3.TreeMap的基本操作 containsKey、get、put 和 remove 的时间复杂度是 log(n)。

  • 10
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值