【Java核心面试宝典】Day2、谈一谈List接口的实现?
【摘要】 Hello,你好呀,我是灰小猿!一个超会写bug的程序猿!用坚持缔造技术、用指尖敲动未来!和很多小伙伴们一样,我也是一名奔波在Java道路上的“创造者”。也想靠技术来改变未来,改变世界!因为我们坚信每一次敲动键盘都能让生活变得更智能、世界变得更有趣!在此专栏《Java核心面试宝典》记录我们备战梦想的【day 2】!目录1、是否知道list接口的继承关系?2、常用哪些List的实现类?都...
Hello,你好呀,我是灰小猿!一个超会写bug的程序猿!
用坚持缔造技术、用指尖敲动未来!
和很多小伙伴们一样,我也是一名奔波在Java道路上的“创造者”。也想靠技术来改变未来,改变世界!因为我们坚信每一次敲动键盘都能让生活变得更智能、世界变得更有趣!
在此专栏《Java核心面试宝典》记录我们备战梦想的【day 2】!
目录
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相关集合的使用,更多的还是要求对其底层源码的理解程度和在实际操作过程中对合适集合类型的选择。
感兴趣的小伙伴可以订阅专栏,
灰小猿陪你一起进步!
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
作者其他文章
评论(0)