当前位置: 首页 > news >正文

【Java核心技术/基础】30道Java核心技术集合框架面试题及答案

Java集合框架30道核心面试题与答案

1. Java集合框架的主要组成部分是什么?

答案:

  • Collection接口:List、Set、Queue
  • Map接口:HashMap、TreeMap等
  • 工具类:Collections、Arrays

2. List、Set、Map的区别?

答案:

  • List:有序、可重复,通过索引访问
  • Set:无序、不可重复
  • Map:键值对存储,键不可重复

3. ArrayList和LinkedList的区别?

答案:

  • ArrayList:基于动态数组,随机访问快(O(1)),插入删除慢(O(n))
  • LinkedList:基于双向链表,随机访问慢(O(n)),插入删除快(O(1))

4. HashMap的工作原理?

答案:

  • 基于数组+链表/红黑树实现
  • 通过hashCode()计算桶位置
  • 使用equals()解决哈希冲突
  • JDK8后当链表长度>8时转为红黑树

5. HashMap和HashTable的区别?

答案:

  • HashMap:线程不安全,允许null键值,效率高
  • HashTable:线程安全,不允许null键值,效率低

6. ConcurrentHashMap的实现原理?

答案:

  • JDK7:分段锁(Segment)
  • JDK8:CAS + synchronized锁单个桶
  • 更好的并发性能

7. HashSet的实现原理?

答案:

  • 基于HashMap实现
  • 元素存储在HashMap的key中
  • value使用固定的Object对象

8. 如何保证集合的线程安全?

答案:

  • 使用Collections.synchronizedXXX()包装
  • 使用ConcurrentHashMap、CopyOnWriteArrayList等
  • 使用Vector、HashTable(不推荐)

9. Comparable和Comparator的区别?

答案:

  • Comparable:自然排序,实现compareTo()方法
  • Comparator:定制排序,实现compare()方法
// Comparable示例
class Person implements Comparable<Person> {public int compareTo(Person other) {return this.name.compareTo(other.name);}
}// Comparator示例
Comparator<Person> byAge = (p1, p2) -> p1.getAge() - p2.getAge();

10. fail-fast和fail-safe机制?

答案:

  • fail-fast:快速失败,检测到并发修改抛出ConcurrentModificationException
  • fail-safe:安全失败,在副本上操作,不抛出异常

11. ArrayList的扩容机制?

答案:

  • 初始容量10
  • 扩容公式:newCapacity = oldCapacity + (oldCapacity >> 1)
  • 即每次扩容为原来的1.5倍

12. HashMap的扩容机制?

答案:

  • 默认初始容量16,负载因子0.75
  • 当元素数量 > 容量 × 负载因子时扩容
  • 扩容为原来的2倍:newCap = oldCap << 1

13. TreeMap和HashMap的区别?

答案:

  • HashMap:基于哈希表,无序,O(1)时间复杂度
  • TreeMap:基于红黑树,按键排序,O(log n)时间复杂度

14. 如何选择List的实现类?

答案:

  • 查询多:ArrayList
  • 增删多:LinkedList
  • 线程安全:CopyOnWriteArrayList

15. Iterator和ListIterator的区别?

答案:

  • Iterator:单向遍历,可删除元素
  • ListIterator:双向遍历,可增删改元素

16. 如何实现集合的排序?

答案:

// 自然排序
Collections.sort(list);// 定制排序
Collections.sort(list, comparator);// Stream API排序
list.stream().sorted().collect(Collectors.toList());

17. Arrays.asList()的注意事项?

答案:

  • 返回的List大小固定,不能增删
  • 修改数组会影响List,反之亦然
  • 基本类型数组会被当作单个元素

18. Collection和Collections的区别?

答案:

  • Collection:集合接口
  • Collections:集合工具类

19. 什么是弱哈希映射(WeakHashMap)?

答案:

  • 当键对象没有其他引用时,会被垃圾回收器回收
  • 适用于缓存场景

20. LinkedHashMap的特点?

答案:

  • 保持插入顺序或访问顺序
  • 通过双向链表维护顺序
  • 可用于实现LRU缓存

21. CopyOnWriteArrayList的原理?

答案:

  • 写时复制,写操作在副本上进行
  • 读操作无锁,适合读多写少场景
  • 写操作加锁,保证线程安全

22. PriorityQueue的实现原理?

答案:

  • 基于二叉堆实现
  • 可自然排序或定制排序
  • 队首元素总是优先级最高的

23. 如何避免ConcurrentModificationException?

答案:

  • 使用Iterator的remove()方法
  • 使用并发集合类
  • 遍历时不修改集合

24. EnumSet和EnumMap的特点?

答案:

  • EnumSet:专为枚举设计的高效Set
  • EnumMap:专为枚举设计的高效Map
  • 性能优于普通集合

25. 什么是IdentityHashMap?

答案:

  • 使用==而不是equals()比较键
  • 允许键重复(如果不是同一对象)
  • 特殊场景使用

26. 集合的遍历方式有哪些?

答案:

// 1. for循环
for (int i = 0; i < list.size(); i++) {}// 2. 增强for循环
for (String item : list) {}// 3. Iterator
Iterator<String> it = list.iterator();// 4. forEach
list.forEach(item -> {});// 5. Stream
list.stream().forEach(item -> {});

27. 如何实现LRU缓存?

答案:

class LRUCache<K, V> extends LinkedHashMap<K, V> {private final int capacity;public LRUCache(int capacity) {super(capacity, 0.75f, true);this.capacity = capacity;}@Overrideprotected boolean removeEldestEntry(Map.Entry<K, V> eldest) {return size() > capacity;}
}

28. 集合的线程安全方案比较?

答案:

  • synchronizedXXX:粗粒度锁,性能较差
  • ConcurrentHashMap:细粒度锁,性能较好
  • CopyOnWriteArrayList:读无锁,写复制,适合读多写少

29. Stream API在集合中的应用?

答案:

List<String> result = list.stream().filter(s -> s.startsWith("A")).map(String::toUpperCase).sorted().collect(Collectors.toList());

30. 如何设计不可变集合?

答案:

// JDK9之前
List<String> list = Collections.unmodifiableList(new ArrayList<>());// JDK9+
List<String> list = List.of("a", "b", "c");
Set<String> set = Set.of("a", "b");
Map<String, String> map = Map.of("key", "value");

这些题目涵盖了Java集合框架的核心知识点,掌握它们将有助于在面试中更好地展示你的Java基础能力。

http://www.dtcms.com/a/446622.html

相关文章:

  • 代做网站公司哪家好pc网站开发
  • 如何用服务器发布网站揭阳制作公司网站
  • 开发网站网络公司wordpress 三栏主题
  • 门户网站报价常用的网站类型有哪些类型有哪些类型
  • 做网站外包群wordpress 大小
  • 论信息系统项目的资源管理和成本管理,(人力资源管理)
  • AI Workflow v.s. AI Agent v.s. Agentic Workflow 与应用建议
  • P1996 约瑟夫问题
  • 有哪些学做衣服的网站网站开发团队人数构成
  • 做网站苏州淘宝店网站建设
  • 对面试的一些思考
  • 【代码随想录day 35】 力扣 01背包问题 二维
  • 百度网盘怎么做网站友情链接交换平台免费
  • 网站模版亮点网站建设有关表格
  • 手机端网站制作教程合肥大型网站制
  • 鞍山高新区网站软文技巧
  • wordpress做物流网站网站建设合同书相关附件
  • 软件供应链风险预测实操指南——从SCA到SBOM 2.0的全流程落地
  • 免费网站排名优化在线产品营销推广方案
  • C语言-指针总结
  • 非小米电脑安装电脑管家实现互联互通
  • 怎样在网站上做外贸php网站开发环境说明
  • PostgreSQL 单库备份
  • 阳春做网站已有网站开发app客户端
  • 版面设计图大全长沙如何优化排名
  • 网站验证码文件厦门建设银行网站
  • 力扣hot100做题整理(31-40)
  • Oracle OCP认证考试题目详解082系列第54题
  • 淘宝客网站搜索怎么做湖南优化电商服务有限公司
  • 安阳市建设工程领域网站图片 移动网站开发