2026-10-23 15:29:25
在 Java 集合框架中处理异常是确保程序健壮性的关键环节。以下是针对常见异常的处理方法及实战案例的详细说明:
一、常见集合异常类型触发场景:访问集合时索引越界(如 list.get(-1) 或 list.get(list.size()))。
触发场景:操作未初始化的集合或集合中的 null 元素(如 list.add(null) 后调用方法)。
触发场景:单线程下迭代时修改集合结构(如遍历 List 时直接调用 remove()),或多线程并发修改。
通过捕获特定异常类型,执行恢复逻辑或记录错误:
try { List<String> list = Arrays.asList("A", "B"); System.out.println(list.get(3)); // 触发 IndexOutOfBoundsException} catch (IndexOutOfBoundsException e) { System.err.println("索引越界: " + e.getMessage());} catch (NullPointerException e) { System.err.println("集合未初始化或元素为null");}2. 使用 Iterable 接口的 for-each 循环适用于 List、Set 等可迭代集合,异常会终止循环并抛出:
List<String> list = new ArrayList<>(Arrays.asList("A", "B"));try { for (String item : list) { if (item.equals("B")) { list.remove(item); // 触发 ConcurrentModificationException } }} catch (ConcurrentModificationException e) { System.err.println("检测到并发修改: " + e);}3. 防御性编程使用 CopyOnWriteArrayList 避免并发修改异常:
List<String> threadSafeList = new CopyOnWriteArrayList<>(Arrays.asList("A", "B"));for (String item : threadSafeList) { if (item.equals("A")) { threadSafeList.remove("B"); // 不会抛出 ConcurrentModificationException }}四、最佳实践总结通过结合异常捕获、防御性编程和并发安全集合,可以显著提升 Java 集合操作的可靠性。