Java 集合常见面试题总结

文章详细介绍了Java集合框架中的接口,如Collection、List、Set、Queue、Deque和Map,以及它们的特点和常用方法。List是有序可重复的集合,Set是无序不可重复的。Map是键值对映射,键唯一。还讨论了不同集合实现类的区别,如ArrayList和LinkedList的访问和操作效率,HashMap和Hashtable的线程安全及键值策略,以及HashSet和TreeSet的实现原理。此外,还提到了并发安全的ConcurrentHashMap及其实现原理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  1. Java中集合框架的接口有哪些?Java中集合框架的接口包括:Collection、List、Set、Queue、Deque、Map。

  2. Collection接口常用的方法有哪些?Collection接口常用的方法包括:add、addAll、remove、removeAll、retainAll、size、isEmpty、contains、containsAll、clear。

  3. List接口的特点是什么?List接口是有序的、可重复的集合,可以根据元素的下标访问和修改元素。

  4. Set接口的特点是什么?Set接口是无序的、不可重复的集合,不允许存储重复的元素。

  5. Map接口的特点是什么?Map接口是一种键值对映射的集合,每个键只能对应一个值,键是唯一的,值可以重复。

  6. List和Set的区别是什么?List是有序的、可重复的集合,可以根据元素的下标访问和修改元素;Set是无序的、不可重复的集合,不允许存储重复的元素。

  7. HashMap和Hashtable的区别是什么?HashMap和Hashtable都实现了Map接口,但是它们有几个区别:Hashtable是线程安全的,而HashMap不是;Hashtable不允许键或值为null,而HashMap允许;HashMap的迭代器是fail-fast的,而Hashtable的迭代器不是。

  8. ArrayList和LinkedList的区别是什么?ArrayList和LinkedList都实现了List接口,但是它们有几个区别:ArrayList是基于动态数组实现的,支持随机访问和快速遍历,但是插入和删除操作效率低;LinkedList是基于双向链表实现的,支持快速的插入和删除操作,但是访问元素的效率较低。

  9. HashSet和TreeSet的区别是什么?HashSet和TreeSet都实现了Set接口,但是它们有几个区别:HashSet是基于哈希表实现的,元素无序,不允许存储重复的元素;TreeSet是基于红黑树实现的,元素有序,不允许存储重复的元素。

  10. TreeMap和HashMap的区别是什么?TreeMap和HashMap都实现了Map接口,但是它们有几个区别:TreeMap是基于红黑树实现的,元素有序,键不能为null;HashMap是基于哈希表实现的,元素无序,键和值都可以为null。

  11. ConcurrentHashMap和Hashtable的区别是什么?ConcurrentHashMap和Hashtable都实现了Map接口,但是它们有几个区

    别:ConcurrentHashMap是线程安全的,支持高并发访问,但是在并发环境下,ConcurrentHashMap的迭代器可能不是完全一致的;Hashtable是线程安全的,但是效率较低,迭代器是完全一致的。

  12. HashSet的实现原理是什么?HashSet是基于HashMap实现的,HashSet中的元素相当于HashMap中的键,元素的值为常量Object对象。向HashSet中添加元素时,实际上是将元素作为键添加到HashMap中,值为一个固定的Object对象。检查HashSet中是否包含某个元素时,实际上是通过HashMap的containsKey方法判断该键是否存在。

  13. ArrayList的扩容机制是什么?ArrayList的扩容机制是在添加元素时,先判断是否需要扩容,如果需要,就按照当前容量的1.5倍进行扩容,并将原有的元素复制到新的数组中。

  14. HashMap的实现原理是什么?HashMap是基于哈希表实现的,具体来说,它是通过将键的哈希值映射到数组索引来实现的。当插入一个键值对时,首先计算键的哈希值,然后通过哈希函数将其映射到数组索引上。如果该索引位置已经存在了其他键值对,就会发生哈希冲突,此时会使用链表或红黑树等数据结构存储冲突的键值对。在查询一个键值对时,首先计算键的哈希值,然后根据哈希值查找对应的索引位置,如果该位置上存在键值对,则遍历链表或红黑树查找具体的键值对。

  15. ConcurrentHashMap的实现原理是什么?ConcurrentHashMap是基于分段锁实现的。它将整个Map分成若干个Segment(段),每个Segment都是一个独立的哈希表,它们可以被不同的线程同时访问,从而提高并发性能。在修改操作时,只需要锁定对应的Segment,而不需要锁定整个Map,从而实现了更细粒度的锁控制。

  16. Iterator和ListIterator的区别是什么?Iterator是集合迭代器的接口,只能向前遍历,不支持修改操作;ListIterator是List迭代器的接口,支持向前和向后遍历,可以进行修改操作。

  17. fail-fast和fail-safe的区别是什么?fail-fast和fail-safe都是Java中迭代器的机制,它们的区别在于:fail-fast机制在迭代器遍历集合时,如果在遍历过程中集合被修改了,就会抛出currentModificationException异常;而fail-safe机制则是在遍历集合时,不直接在集合中遍历,而是在遍历的时候通过复制一份原集合的快照,然后遍历快照而不是原集合,因此不会抛出ConcurrentModificationException异常。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值