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

2021-09-23 15:22:28 浏览数 (1)

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的底层实现列表接口的继承关系实现原理等。

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

我是灰小猿,我们下期见!

0 人点赞