面试之map集合

面试之map集合

1、 HashMap与HashTable区别

  • HashMap是Hashtable的轻量级实现(非线程安全的实现),他们都完成了Map接口,主要区别在于HashMap允许空(null)键值(key),由于非线程安全,在只有一个线程访问的情况下,效率要高于Hashtable。HashMap允许将null作为一个entry的key或者value,而Hashtable不允许。Hashtable的方法Synchronize的,而HashMap不是,在多个线程访问Hashtable时,不需要自己为它的方法实现同步,而HashMap就必须为之提供同步。ConcurrentHashMap

2、HashMap是线程安全的吗?线程安全的Map都有哪些?性能最好的是哪个?

  • HashMap不是线程安全的,线程安全的有HashTable和concurrenhashmap

7、HashMap的链表结构设计是用来解决什么问题的?

解决哈希冲突

1、JDK1.7的HashMap是由数组+链表构成的,新增一个数通过哈希算法,计算出对应存放在数组的某个位置,如果这个位置已经存在数据了,也就是说存在了哈希冲突,这时候JDK1.7就将新增的数和原来的数构成一个链表放在数组这个位置,后面冲突的数依次都放入链表中。
2、通常解决哈希冲突有两种办法,上面所说的通过链表的形式称为链地址法;
还有一种方法称为开放地址法,也就是说如果存在哈希冲突了,那么将新增的值在用一个新的哈希算法算出所存的位置插入,但是这还会构成二次冲突,三次冲突…

3、JDK1.8的HashMap是由数组+链表+红黑树构成,
当链表长度超过8会自动转换成红黑树,红黑树节点个数小于6,又自动转换为链表。这是为了提高检索效率(红黑树检索效率明显是高于链表的

小菜鸡一枚,通过写markdown督促自己好好复习面试题

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值