问题问答之Map

Jdk8中hashMap有哪些改动?

7中链表加数组的方式,8中增加的红黑数做数据结构  ,扩容机制,增加了

ConcurrentHashMap线程安全集合

 

Jdk8为什么要使用红黑树?

介于两者之间,插入效率高的链表和查询快的二叉树优势  ,而红黑树 插入比二叉树高,查询比链表快

 

hashMap 扩容机制是怎么样的,7和8的有什么不同

8中如果对象超过了8就使用红黑树来存储,没超过就用链表。通过法值来控制

 

为什么重写对象的equals方法 时,要重写hashCode方法。跟hashMap有关系吗?

对象的比较单独用equals时,会拿不到值,因为源码中使用的是hash值来判断这个对象是不是同一个对象

 

hashMap是线程安全的吗,concurrentModificationException 如何解决?

线程不安全,用CurrentHahMap 解决了这个问题,如 remove时报错

要注意什么?

对象使用时,尽量用final ,  如 User user = new User();   别人也new  会拿不到值  所以 :final User user = new User();

 

         HashMap,LinkedHashMap,TreeMap都属于Map的子接口.Map用于存储键值对.键不可以重复,但是值可以重复

         HashMap好是根据hashCode值存储数据.可以为空

         LinkedHashMap也是一个HashMap.但是内部维持了一个双向链表,可以保持顺序,先进先出

        性能:遍历的时候比hashMap慢.  因为保持插入的顺序要额外的开销.  当HashMap的容量很大的时候,实际数据很少,遍历起来就可能比LinkedHashMap慢.因为LinkedHashMap遍历速度只和实际数据有关,和容量无关.而HashMap和他的容量有关.

         TreeMap实现的是SortMap接口.能够使保存的记录根据键排序,默认是升序的.使用Iterator遍历得到的结果也是排过序的

         一般情况下,我们用的最多的是HashMap  在Map中插入\删除,定位元素.hashMap是最好的选择.

        如果要按顺序遍历键.(自然或者自定义),TreeMap是最好的选择

         如果需要输出的顺序和输入的相同,那就使用LinkedHashMap来实现.它还可以按读取顺序来排序.

         HashTable是线程安全的一个Colletion,不允许空值的存在,这个接口已经被淘汰了.如果要用线程安全,就使用ConcurrentHashMap

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值