Map

    一、TreeMap

  TreeMap是一个有序的key-value集合,底层是使用红黑树实现的,因此TreeMap的基本操作的时间复杂度都是log(n)。默认是按照key的自然顺序进行排序,获取按照传入的Comparator进行排序。

   上图为TreeMap的类图,可知它支持一系列的导航方法,能被克隆、序列化。

   HashMap:底层采用数组+链表(红黑树)结构,可以实现快速的存储和检索,但是数据是无序的,适用于在Map当中插入删除或者获取元素
  TreeMap: 存储结构是一个平衡二叉树,具体实现方式为红黑树,默认采用自然排序,可以自定义排序规则,但是需要实现Comparator接口
                 能够便捷的实现内部元素的各种排序,但是性能比HashMap差,适用于按照自然排序和自定义排序规则

二、LinkedHashMap

  HashMap是无序的,插入元素时根据哈希值放入对应的地方。JDK1.4之后提供了LinkedHashMap来实现插入有序的HashMap。

  LinkedHashMap 是 Map 接口的哈希表和链接列表实现,LinkedHashMap 实现与 HashMap 的不同之处在于,LinkedHashMap 维护着一个运行于所有条目的双重链接列表。此链接列表定义了迭代顺序,该迭代顺序可以是插入顺序或者是访问顺序。

   重新定义Entry,除了HashMap中的特性,还增加了节点前、后索引,形成一个双向链表。LinkedHashMap的有序就是通过前后索引的遍历取出元素,从而实现有序。

    static class Entry<K,V> extends HashMap.Node<K,V> {
        Entry<K,V> before, after;
        Entry(int hash, K key, V value, Node<K,V> next) {
            super(hash, key, value, next);
        }
    }
原文地址:https://www.cnblogs.com/qmillet/p/13066419.html