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,元素是无序的,通过方法 hashCode
和equals
保证元素没有重复;
TreeSet 的底层实现基于 TreeMap,元素是有序的,通过 Comparable
接口或 Comparator
接口保证元素没有重复。
今日总结
集合和容器相关的内容虽然经常用,但是我们可以看出能出的面试题其实一点都不少,这里面的很多都是重点,比如HashMap的底层实现
、列表接口的继承关系
、实现原理
等。
这方面的题目还有很多,所以如果小伙伴们有遇到其他相关的面试题,欢迎在评论区留言提出,我会把大家提出的总结到文章内`, 欢迎小伙伴们一起评论区打卡学习!小伙伴们可也在左方加我好友一起探讨学习!
我是灰小猿,我们下期见!