欢迎小伙伴订阅我的新专栏“Java高薪面试宝典”,在这里我将和大家分享在Java面试中常见的核心考点和技术,为大家的Java学习之路助一臂之力!
目录
Hello,你好呀,我是灰小猿,一个超会写bug的程序猿!
在Java的相关面试中,集合相关的内容问到的还是比较多的,一般都是List接口及常见实现,Map接口及常见实现和Set接口及常见实现,其中最经常问到的要数Map接口及其相关实现了,当然这并不代表其他两个就不重要了,所以今天先和大家聊一下在面试中关于list集合的一些问题。
1、是否知道list接口的继承关系?
关于list接口的继承关系,一般这都是在考察我们对底层源码的理解程度,那么我在这里给大家总结了一个list接口的继承关系图,从图中我们可以很清楚的看到list接口从上及下的继承过程,同时关于List接口和AbstractCollection类的上层接口Collection1的使用方法,大家可以看我的这篇文章“Java集合类之Collection接口,集合的“爸爸”接口了解一下?”
只有经常的阅读相关的底层源码,以至于在使用和提问到list接口的相关内容时,才能更好的掌握和应对。
2、常用哪些List的实现类?都有什么特征?
1、ArrayList
ArrayList的底层是动态数组,它具有的特点是查找快增删慢,默认的初识容量是10,每次采用1.5倍的扩容。
2、Vector
Vector和ArrayList是一样的,都是动态数组,具有和ArrayList一样的特征,但是不同的就是Vector是支持线程同步的,这也就说明ArrayList是不支持线程同步的。
3、LinkedList
LinkedList是采用链表结构来存储数据的,适用于动态的插入和删除操作,但缺点就是随机访问或遍历比较慢,是因为他需要从头结点一个一个的查找。同时它实现了Deque接口,因此还具有队列的特性。
3、ArrayList和LinkedList对比
为了能够更加方便的理解和记忆ArrayList和LinkedList,在这里还给大家总结了一个表格。
|
ArrayList |
LinkedList |
---|---|---|
线程安全 |
不是同步的,不保证线程安全 |
不是同步的,不保证线程安全 |
底层数据结构 |
Object数组 |
双向链表(1.6之前是循环链表,1.7之后取消了循环) |
支持随机访问 |
支持 |
不支持 |
插入效率 |
受插入位置的影响 |
不受插入位置影响 |
内存占用 |
ArrayList的空间浪费主要体现在list列表的结尾会预留一定的容量空间 |
LinkedList的空间花费主要体现在它的每一个元素都需要消耗比ArrayList更多的空间 |
以上是在list接口的相关问题中比较容易问到和考察的内容,其实关于list相关集合的使用,更多的还是要求对其底层源码的理解程度和在实际操作过程中对合适集合类型的选择。
感兴趣的小伙伴可以订阅专栏,
灰小猿陪你一起进步!