java里map相关子接口和实现类

今天写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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Ctrl+C+V程序猿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值