集合框架

一. 继承体系

参考:

https://blog.csdn.net/qq_43294932/article/details/122997571

二. 必背题

HashMap的扩容机制?

在1.7之前HashMap底层是数组+链表的方式, 在1.7之后, 底层则是数组+链表或红黑树的方式实现的.

当数组长度大于64且链表长度大于8的时候, 链表会转化为红黑树. 否则, 当发生hash碰撞的时候, 会选择扩容, 然后重新分配元素位置.

加载因子默认是0.75, 数组大小默认是16, 每次扩容为原来的两倍.

Map, List, Set区别, 是否允许null键, null值.

map是以键值对的方式去存储数据, List则是以有序的方式存储数据, Set则是无序的.

HashSet底层借助了HashMap实现, 只不过value的值为默认的.

因此, HashMap允许一个null键, 多个null值, List允许多个null值, set则只允许一个null值.

HashMap是线程安全的吗, Hashtable呢?

HashMap不是线程安全的, Hashtable是线程安全的. 但Hashtable已经是过时的, 不推荐在开发中使用, 如果想使用集合并保证线程安全, 可以使用ConcurrentHashMap或者使用Collections的同步方法, 将集合转变为线程安全的.

Hashtable和ConcurrentHashMap的线程安全机制, 区别?

Hashtable底层借助synchronized实现线程安全. 因此, 同一时间只能有一个线程操作Hashtable, 效率上来说比ConcurrentHashmap低太多了.

而ConcurrentHashMap在1.7和1.8之间的实现方式也略有区别.

在1.7中, ConcurrentHashmap使用了segment + synchronized来保证线程安全, 锁是针对segment的, 因此效率上来说比Hashtable高16倍.

在1.8中, 使用 Node + CAS + synchronized来保证线程安全, 锁是针对链表或树的首节点的, 因此, 不发生hash碰撞的时候, 效率比1.7又提升了很多倍.

ArrayList和LinkedList的区别?

ArrayList是基于数组实现的, LinkedList是基于双向链表实现的.

前者基于索引的查找效率高, 后者插入和删除效率高.

了解Collections工具类吗?

三. 资料来源

https://blog.csdn.net/m0_67698950/article/details/125049914

https://www.cnblogs.com/crazymakercircle/p/16281251.html

原文地址:http://www.cnblogs.com/wang-jifeng/p/16151746.html

1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长! 2. 分享目的仅供大家学习和交流,请务用于商业用途! 3. 如果你也有好源码或者教程,可以到用户中心发布,分享有积分奖励和额外收入! 4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解! 5. 如有链接无法下载、失效或广告,请联系管理员处理! 6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需! 7. 如遇到加密压缩包,默认解压密码为"gltf",如遇到无法解压的请联系管理员! 8. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载 声明:如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性