美文网首页数据
Map接口的实现类

Map接口的实现类

作者: 言西枣 | 来源:发表于2016-05-22 05:13 被阅读604次

除了最常用的HashMap以外,还有一些常用的Map实现类,这里做一个与HashMap的对比

HashTable

  • HashTable是同步的(synchronized函数),而HashMap不同步,所以HashTable要慢一些
  • HashTable不接受null键和值,而HashMap接受一个null键和无数个null值
  • 除了keySet(), entrySet(), values()这些HashMap支持的迭代之外,HashTable还支持基于Enumeration的keys(), elements(), 但是在现在他们的实现都是基于一个实现了Enumeration和Iterator接口的类。

LinkedHashMap

  • 继承了HashMap,是Map接口的Hash table和linked list实现,所以在迭代的时候的顺序是已知的,这个顺序可以是插入的顺序,也可以设为最后访问,也就是说可以实现一个LRU cache
  • 插入性能略低于HashMap,但迭代时要好于HashMap

TreeMap

  • 内部由红黑树实现,所以是一个有序的Map接口的实现,TreeSet也是依赖TreeMap实现的。
  • 类似于PriorityQueue,也是分为自然排序和定制排序
  • containsKey, get, put and remove 操作时间复杂度log(n),因为这事一个自平衡的二叉查找树

Collections.synchronizedMap()

将不同步的map转换为同步的map

     private static class SynchronizedMap<K,V>
        implements Map<K,V>, Serializable {
        private static final long serialVersionUID = 1978198479659022715L;

        private final Map<K,V> m;     // Backing Map
        final Object      mutex;        // Object on which to synchronize
        // .......
}

关键在于包装了原来的集合对象,添加了一个用于同步的对象,在实现Map的所有方法的时候,内部都要先获取mutex对象的锁,以此同步。

ConcurrentHashMap

  • 线程安全的Map实现类,内部结构与HashMap类似,但对HashMap里的table数组进行了分段。
  • 分段是为了分段加锁,这就是它和HashTable等其它同步Map类最大的不同,而且由于分段,所以并发度也就是段数,默认16
  • fail safe iterator,不抛出异常

相关文章

  • Java核心技术-具体的集合

    除了Map结尾的类之外,其他都实现了Collection接口,而以Map结尾的类实现了Map接口。 链表 在Jav...

  • Java学习——day 10

    主要内容 Map接口 Set接口 迭代器 笔记详情 1. Map接口 实现map接口的类,用来存储键值对。常用到的...

  • Map篇

    一、Map接口 Map接口主要的方法有: 还有一些默认实现的方法: 二、主要实现类 HashMap HashTab...

  • java28(map)

    Map: Map不是collection的子接口或者实现类。Map是一个接口。set中很多底层方法都调用的...

  • Java集合中TreeMap的用法教程

    TreeMap是Map实现类SortMap的实现类。TreeMap实现了NavigableMap接口,内部的结构是...

  • Java 集合框架_AbstractMap

    AbstractMap类是Map接口的子类,实现了Map接口大部分方法,它的子类只需要实现Set

  • 2018-11-07 Map,HashMap, HashTabl

    Map:key-value接口HashMap, HashTable相同:Map接口的实现类散列表:用key计算ha...

  • HashMap 2018-08-06

    Map:接口,定义了map的基本操作 AbstractMap:抽象类,提供了Map的基本实现

  • Java集合框架之Map

    1 Map集合N016 1.1Map接口 【 • 实现Map接口的集合类用来存储"键-值"映射对。 • JDK...

  • Java-0017-List Set Map-Ⅰ

    2016.7.28 Collection与List、Set、Queue各种接口和实现类的关系 Map各种接口和实现...

网友评论

    本文标题:Map接口的实现类

    本文链接:https://www.haomeiwen.com/subject/xtqorttx.html