【Java核心面试宝典】Day15、“Java容器”高频面试题总结!✊✊✊

举报
灰小猿 发表于 2021/08/30 19:44:37 2021/08/30
【摘要】 Hello,你好呀,我是灰小猿!一个超会写bug的程序猿!用坚持缔造技术、用指尖敲动未来!和很多小伙伴们一样,我也是一名奔波在Java道路上的“创造者”。也想靠技术来改未来,改变世界!因为我们坚信每一次敲动键盘都能让生活变得更智能、世界变得更有趣!在此专栏《Java核心面试宝典》记录我们备战梦想的【day 15】!集合、数组这些内容都是我们日常开发最常用到的东西,但是其中有很多能够被面试官拿...

Hello,你好呀,我是灰小猿!一个超会写bug的程序猿!
用坚持缔造技术、用指尖敲动未来!
和很多小伙伴们一样,我也是一名奔波在Java道路上的“创造者”。也想靠技术来改未来,改变世界!因为我们坚信每一次敲动键盘都能让生活变得更智能、世界变得更有趣
在此专栏《Java核心面试宝典》记录我们备战梦想的【day 15】

请添加图片描述
集合、数组这些内容都是我们日常开发最常用到的东西,但是其中有很多能够被面试官拿来当做考察点的内容你知道嘛?今天就和小伙伴们剖析一下在容器的相关内容中,都会有哪些常见的面试题呢?

1、Iterable和Iterator接口的作用分别是什么?

Iterable接口的作用是使容器具备迭代元素的功能,如果一个容器类实现了Iterable接口,则该容器类的实例就具备了迭代元素的功能。
Iterator接口的作用是迭代器,其作用是迭代容器中的元素。

2、Iterable接口的核心方法是什么?该方法的返回值类型是什么?

Iterable接口的核心方法是iterator,该方法返回迭代器的实例,返回值类型是Iterator

3、如何实现在遍历过程中删除元素?

为了实现在遍历中删除元素,最好的做法是使用迭代器进行元素遍历,当遇到需要删除的元素时,调用方法remove可以删除元素,并且不会出现错误。

4、Collection接口继承了哪个接口?

Collection接口继承了Iterable接口,
关于容器中接口的继承和实现关系,可以看下面这张图:
请添加图片描述

5、Collection接口中的哪三个方法分别和集合的并集、差集、交集运算相似?

方法addAll和集合的并集运算相似,它的作用是一次将另一个容器中的元素全部添加到当前容器中。

方法removeAll和集合的差集运算相似,它的作用是一次将另一个容器中的全部元素从当前容器中删除,

方法retainAll和集合的交集运算相似,它的作用是保留既在当前容器中又在另一个容器中的元素。

6、Collection接口的两个子接口List和Set有什么不同?

List线性表,存储一组顺序排列的元素,==允许元素重复==;
Set集合,存储一组互不相同的元素,==不允许元素重复==。

7、ListIterator类型的迭代器和Iterator类型的迭代器有什么区别?

Iterator类型的迭代器只支持单向遍历ListIterator类型的迭代器支持双向遍历

8、ArrayList和LinkedList的主要区别是什么?从底层实现、随机访问元素、插入和删除元素方面回答?

ArrayList的底层实现是数组LinkedList的底层实现是双向链表
ArrayList可以快速访问指定下标处的元素。LinkedList需要遍历元素才能得到指定下标处的元素。ArrayList插入和删除元素时需要移动其他元素(除了在尾部插入和删除元素的情况),
LinkedList可以快速插入和删除元素,但是在指定位置(除了头部和尾部)插入和删除元素时则需要首先遍历元素到指定位置。

9、ArrayList和Vector的主要区别是什么?什么情况下使用 ArrayList 比使用 Vector 更好?

ArrayList和Vector的主要区别是,Vector的所有方法都是同步的,因此可以保证线程安全。而ArrayList不能保证线程安全。
在不需要保证线程安全的情况下,使用 ArrayList 比使用 Vector 效率更高。

10、Map中,键能否重复?如果重复,会有什么现象?

Map中不允许键重复,因为每一个键对应一个值,如果有重复的键,则会出现一个键对应多个值的情况,这违背了映射的定义

11、HashMap和Hashtable的区别有哪些?

==HashMap 不是线程安全的,Hashtable 是线程安全的;== HashMap 的效率高于 Hashtable;
HashMap 允许键或值为 null,最多可以有一个键为 null,Hashtable 不允许键或值为 null;

从 JDK 1.8 开始,HashMap 的实现包括红黑树,Hashtable 则没有这样的机制。

12、从JDK1.8之后,HashMap的实现有什么变化?

JDK 1.8 之前的 HashMap 的底层通过数组和链表实现,如果出现冲突则通过拉链法解决冲突。
JDK 1.8 在解决冲突时的实现有较大变化,当链表长度大于阈值(默认为 8)时,将链表转化为红黑树。这便是“==树化==”, 当链表长度小于6时,会重新形成链表,这个过程称为“==链化==”。
关于HashMap底层实现的深入探究,小伙伴们可以看这一篇《【Java核心面试宝典】Day3、图解HashMap高频面试及底层实现架构!》。

13、HashSet和TreeSet有什么区别?

HashSet 的底层实现基于 HashMap,元素是无序的,通过方法 hashCodeequals 保证元素没有重复;
TreeSet 的底层实现基于 TreeMap,元素是有序的,通过 Comparable 接口或 Comparator接口保证元素没有重复。

今日总结

集合和容器相关的内容虽然经常用,但是我们可以看出能出的面试题其实一点都不少,这里面的很多都是重点,比如HashMap的底层实现列表接口的继承关系实现原理等。

这方面的题目还有很多,所以如果小伙伴们有遇到其他相关的面试题,欢迎在评论区留言提出,我会把大家提出的总结到文章内`, 欢迎小伙伴们一起评论区打卡学习!小伙伴们可也在左方加我好友一起探讨学习!

我是==灰小猿==,我们下期见!
请添加图片描述

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。