👏作者简介:大家好,我是爱发博客的嗯哼,爱好Java的小菜鸟
🔥如果感觉博主的文章还不错的话,请👍三连支持👍一下博主哦
📝社区论坛:希望大家能加入社区共同进步
🧑💼个人博客:智慧笔记
📕系列专栏:面试宝典
- 本文引自黑马程序员Java面试宝典
有关Java集合内容可以看Java集合详解
文章目录
-
-
- 面试官:说一说Java提供的常见集合?(画一下集合结构图)
- 面试官:ArrayList底层是如何实现的?
- 面试官:ArrayList list=new ArrayList(10)中的list扩容几次
- 面试官:如何实现数组和List之间的转换
- 面试官:用Arrays.asList转List后,如果修改了数组内容,list受影响吗?List用toArray转数组后,如果修改了List内容,数组受影响吗
- 面试官:ArrayList 和 LinkedList 的区别是什么?
- 面试官:嗯,好的,刚才你说了ArrayList 和 LinkedList 不是线程安全的,你们在项目中是如何解决这个的线程安全问题的?
- 面试官:说一下HashMap的实现原理?
- 面试官:HashMap的jdk1.7和jdk1.8有什么区别
- 面试官:好的,你能说下HashMap的put方法的具体流程吗?
- 面试官:好的,刚才你多次介绍了hsahmap的扩容,能讲一讲HashMap的扩容机制吗?
- 面试官:好的,刚才你说的通过hash计算后找到数组的下标,是如何找到的呢,你了解hashMap的寻址算法吗?
- 面试官:为何HashMap的数组长度一定是2的次幂?
- 面试官:好的,我看你对hashmap了解的挺深入的,你知道hashmap在1.7情况下的多线程死循环问题吗?
- 面试官:好的,hashmap是线程安全的吗?
- 面试官:那我们想要使用线程安全的map该怎么做呢?
- 面试官:那你能聊一下ConcurrentHashMap的原理吗?
- 面试官:HashSet与HashMap的区别?
- 面试官:HashTable与HashMap的区别
-
面试官:说一说Java提供的常见集合?(画一下集合结构图)
候选人:
嗯~~,好的。
在java中提供了量大类的集合框架,主要分为两类:
第一个是Collection 属于单列集合,第二个是Map 属于双列集合
- 在Collection中有两个子接口List和Set。在我们平常开发的过程中用的比较多像list接口中的实现类ArrarList和LinkedList。 在Set接口中有实现类HashSet和TreeSet。
- 在map接口中有很多的实现类,平时比较常见的是HashMap、TreeMap,还有一个线程安全的map:ConcurrentHashMap
面试官:ArrayList底层是如何实现的?
候选人:
嗯~,我阅读过arraylist的源码,我主要说一下add方法吧
第一:确保数组已使用长度(size)加1之后足够存下下一个数据
第二:计算数组的容量,如果当前数组已使用长度+1后的大于当前的数组长度,则调用grow方法扩容(原来的1.5倍)
第三:确保新增的数据有地方存储之后,则将新元素添加到位于size的位置上。
第四:返回添加成功布尔值。
面试官:ArrayList list=new ArrayList(10)中的list扩容几次
候选人:
是new了一个ArrarList并且给了一个构造参数10,对吧?(问题一定要问清楚再答)
面试官:是的
候选人:
好的,在ArrayList的源码中提供了一个带参数的构造方法,这个参数就是指定的集合初始长度,所以给了一个10的参数,就是指定了集合的初始长度是10,这里面并没有扩容。
面试官:如何实现数组和List之间的转换
候选人:
嗯,这个在我们平时开发很常见
数组转list,可以使用jdk自动的一个工具类Arrars,里面有一个asList方法可以转换为数组
List 转数组,可以直接调用list中的toArray方法,需要给一个参数,指定数组的类型,需要指定数组的长度。