java里map相关子接口和实现类
2016-10-18 17:22
441 查看
今天写java缓存的时候,用到ConcurrentHashMap,突发想把是涉及到map相关的map子接口和实现列详细的讲解一下,希望对初学者有所帮助!
首先许多面试问题会经常问 在线程安全里会用到哪些map实现类啊,hashmap与hashtable与LinkedHashMap的区别啊等等。当你对map接口有所了解时,这些对你来所就是小ks啦
首先map是一个接口,他已知的子接口有
Bindings,
ConcurrentMap<K,V>,
ConcurrentNavigableMap<K,V>,
LogicalMessageContext,
MessageContext, NavigableMap<K,V>,
SOAPMessageContext,
SortedMap<K,V>;
这个经常不怎么会用到map的子接口
接着map的已知实现类有
AbstractMap,
Attributes, AuthProvider,
ConcurrentHashMap,
ConcurrentSkipListMap,
EnumMap,
HashMap, Hashtable,
IdentityHashMap, LinkedHashMap,
PrinterStateReasons,
Properties,
Provider, RenderingHints,
SimpleBindings,
TabularDataSupport, TreeMap,
UIDefaults,
WeakHashMap
其中经常会用到的是 ConcurrentHashMap,HashMap,HashTable,LinkedHashMap,TreeMap,WeakHashMap
其中ConcurrentHashMap和WeakHashMap在实现java缓存(建议初学者把这个弄懂,对面试和在工作上有很大的帮助的)的时候会用到,这里就不详解啦!
其中 HashTable,TreeMap是比较古老的Map实现类啦,现今也很少用啦,但有点公司还在用的,现在用的比较多的是HashMap,LinkedHashMap.
其中HashTable,HashMap,TreeMap,LinkedHashMap之间存在哪些的区别呢?
HashMap:以key-value的形式存在。在HashMap中,key-value总是会当做一个整体来处理,系统会根据hash算法来来计算key-value的存储位置,我们总是可以通过key快速地存、取value..允许key值为空,在线程中,他是线程不安全的.
HashTable:也是已键值的方式存取数据,但是他的key不允许为空但是他是线程安全的,虽然性能上没有HashMap好,但是安全的.
LinkedHashMap:保留插入的顺序,如果需要输出的顺序和输入时的相同,那么就选用LinkedHashMap,LinkedHashMap实现与HashMap的不同之处在于,后者维护着一个运行于所有条目的双重链接列表。此链接列表定义了迭代顺序,该迭代顺序可以是插入顺序或者是访问顺序。注意,此实现不是同步的。如果多个线程同时访问链接的哈希映射,而其中至少一个线程从结构上修改了该映射,则它必须保持外部同步。
对于LinkedHashMap而言,它继承与HashMap、底层使用哈希表与双向链表来保存所有元素。其基本操作与父类HashMap相似,它通过重写父类相关的方法,来实现自己的链接列表特性.
注意:HashMap,HashTable,LinkedHashMap判断值是否相等都是用hashcode的算法,所以要真正判断值是否相等,从写hashcode和equal方法
LinkedHashMap
首先许多面试问题会经常问 在线程安全里会用到哪些map实现类啊,hashmap与hashtable与LinkedHashMap的区别啊等等。当你对map接口有所了解时,这些对你来所就是小ks啦
首先map是一个接口,他已知的子接口有
Bindings,
ConcurrentMap<K,V>,
ConcurrentNavigableMap<K,V>,
LogicalMessageContext,
MessageContext, NavigableMap<K,V>,
SOAPMessageContext,
SortedMap<K,V>;
这个经常不怎么会用到map的子接口
接着map的已知实现类有
AbstractMap,
Attributes, AuthProvider,
ConcurrentHashMap,
ConcurrentSkipListMap,
EnumMap,
HashMap, Hashtable,
IdentityHashMap, LinkedHashMap,
PrinterStateReasons,
Properties,
Provider, RenderingHints,
SimpleBindings,
TabularDataSupport, TreeMap,
UIDefaults,
WeakHashMap
其中经常会用到的是 ConcurrentHashMap,HashMap,HashTable,LinkedHashMap,TreeMap,WeakHashMap
其中ConcurrentHashMap和WeakHashMap在实现java缓存(建议初学者把这个弄懂,对面试和在工作上有很大的帮助的)的时候会用到,这里就不详解啦!
其中 HashTable,TreeMap是比较古老的Map实现类啦,现今也很少用啦,但有点公司还在用的,现在用的比较多的是HashMap,LinkedHashMap.
其中HashTable,HashMap,TreeMap,LinkedHashMap之间存在哪些的区别呢?
HashMap:以key-value的形式存在。在HashMap中,key-value总是会当做一个整体来处理,系统会根据hash算法来来计算key-value的存储位置,我们总是可以通过key快速地存、取value..允许key值为空,在线程中,他是线程不安全的.
HashTable:也是已键值的方式存取数据,但是他的key不允许为空但是他是线程安全的,虽然性能上没有HashMap好,但是安全的.
LinkedHashMap:保留插入的顺序,如果需要输出的顺序和输入时的相同,那么就选用LinkedHashMap,LinkedHashMap实现与HashMap的不同之处在于,后者维护着一个运行于所有条目的双重链接列表。此链接列表定义了迭代顺序,该迭代顺序可以是插入顺序或者是访问顺序。注意,此实现不是同步的。如果多个线程同时访问链接的哈希映射,而其中至少一个线程从结构上修改了该映射,则它必须保持外部同步。
对于LinkedHashMap而言,它继承与HashMap、底层使用哈希表与双向链表来保存所有元素。其基本操作与父类HashMap相似,它通过重写父类相关的方法,来实现自己的链接列表特性.
注意:HashMap,HashTable,LinkedHashMap判断值是否相等都是用hashcode的算法,所以要真正判断值是否相等,从写hashcode和equal方法
LinkedHashMap
相关文章推荐
- java--17--Map及其实现类与子接口
- Java:基于Map实现的频率统计代码
- java动态代理类,测试,实现AOP,在执行target回调方法前后插入相关代码处理
- bitmap思想及其在java中的相关实现
- JavaScript实现Java中的Map结构
- Java二维数组实现简单Map(梁健-原创)
- javascript 实现的类似于java里的Map对象
- Java容器学习笔记(二) Set接口及其实现类的相关知识总结
- Java中常用数据结构的实现类 Collection和Map
- Java通过google map api实现地址解析的方法
- 关于一道J笔试或者机试题的Java实现:从键盘输入一串字符,翻转后输出(要求不使用string相关类即对象)
- javascript实现的java里的Map对象
- Java中常用数据结构的实现类 Collection和Map
- Java中2.5D游戏的设计与实现(3)—八方走法实现原理及相关代码
- 关于一道J笔试或者机试题的Java实现:从键盘输入一串字符,翻转后输出(要求不使用string相关类即对象)
- javascript实现的java里的Map对象
- Java2.5D游戏的设计与实现(3)—八方走法实现原理及相关代码 推荐
- Java中常用数据结构的实现类 Collection和Map
- Java容器类List、ArrayList、Vector及map、HashTable、HashMap的区别与用法 - [Java|技术相关]
- Java中Map相关的快速查找算法与唯一性探讨