首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 綜合教學

Java Collection 集合核心操作与遍历删除避坑指南

     編輯:Java 綜合教學

Collection 接口核心方法

Collection 是所有集合的父接口(JDK 1.5+ 继承 Iterable),定义了通用操作:

方法功能注意事项
add(E e)添加元素返回 boolean,Set 添加重复返回 false
remove(Object o)删除指定元素**仅接收元素对象**,不接受索引(List 子类重载了索引版)
clear()清空集合
size()获取元素个数区别:String.length()、数组.length
contains(Object o)判断包含元素常用于去重逻辑
toArray()转数组推荐 toArray(new T[0]) 类型安全

数组与集合互转

// 集合 -> 数组
Integer[] arr = list.toArray(new Integer[0]);

// 数组 -> 集合 (固定长度列表,不可增删)
List list = Arrays.asList(arr);
// 可变列表
List mutableList = new ArrayList<>(Arrays.asList(arr));

遍历时删除元素:三种方式对比

List list = new ArrayList<>(Arrays.asList("a", "a", "b", "a"));

1. 普通 for 循环(索引回退法)

for (int i = 0; i < list.size(); i++) {
    if (list.get(i).equals("a")) {
        list.remove(i--); // 关键:删除后索引回退,防止漏删相邻元素
    }
}
// 结果: [b]

2. 增强 for / for-each(不可删除)

// 错误示范:运行时抛 ConcurrentModificationException
for (String s : list) {
    if ("b".equals(s)) list.remove("b"); 
}
// 原因:增强 for 底层用 Iterator,但未暴露 remove() 方法,直接修改集合结构触发 fail-fast。

3. Iterator 迭代器(标准安全删除)

Iterator it = list.iterator();
while (it.hasNext()) {
    String s = it.next(); // 必须先赋值,否则连续调用 next() 会跳过元素
    if (s.equals("a")) {
        it.remove(); // 唯一安全的遍历中删除方式
    }
}
// 结果: [b]

完整测试代码

public class CollectionDemo {
    public static void main(String[] args) {
        fun2(); // 推荐方式
    }
    static void fun() { /* 普通 for 删除 */ }
    static void fun1() { /* 增强 for 尝试删除 -> 抛异常 */ }
    static void fun2() { /* Iterator 删除 */ }
}

核心口诀

  • **只读遍历**:首选 for (E e : list)。
  • **需删除/修改结构**:**必须用 Iterator**,且 next() 结果存变量后再判断。
  • **普通 for 删除**:倒序遍历 i-- 或索引回退 i--。
  • **并发环境**:用 CopyOnWriteArrayList 或 Collections.synchronizedList + 同步块。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved