java List 删除误区

简介: java List 删除误区

1.删除代码

        List<String> list = new ArrayList<>();
        list.add("1111");
        list.add("222");
        list.add("333");
        list.add("222");
        list.add("222");
        System.out.println(list.toString());
        //1.错误
        /*for (int i=0;i<list.size();i++){
            if (list.get(i).equals("222")){
                list.remove(i);
            }
        }
        System.out.println(list.toString());*/
        //2.正确
        /*for (int i=0;i<list.size();i++){
            if (list.get(i).equals("222")){
                list.remove(i--);
            }
        }
        System.out.println(list.toString());*/
        //3.倒序删除,正确
        /*for (int i = list.size() - 1; i >= 0; i--) {
            if (list.get(i).equals("222")) {
                list.remove(i);
            }
        }
        System.out.println(list.toString());*/
        //4.正确做法
        Iterator<String> it = list.iterator();
        while (it.hasNext()) {
            if (it.next().equals("222")) {
                it.remove();
            }
        }
        System.out.println(list);

实际原因:

为什么元素3只删除了一个?本以为这代码再简单不过,可还是掉入了陷阱里,上面的代码这样写的话,元素3是过滤不完的。只要list中有相邻2个相同的元素,就过滤不完。List调用remove(index)方法后,会移除index位置上的元素,index之后的元素就全部依次左移,即索引依次-1要保证能操作所有的数据,需要把index-1,否则原来索引为index+1的元素就无法遍历到(因为原来索引为index+1的数据,在执行移除操作后,索引变成index了,如果没有index-1的操作,就不会遍历到该元素,而是遍历该元素的下一个元素)。

参考:


相关文章
|
1月前
|
存储 安全 Java
java集合框架及其特点(List、Set、Queue、Map)
java集合框架及其特点(List、Set、Queue、Map)
|
1月前
|
Java
java8中List对象转另一个List对象
java8中List对象转另一个List对象
39 0
java.lang.Error: Unresolved compilation problem: The type List is not generic; it cannot be parame
java.lang.Error: Unresolved compilation problem: The type List is not generic; it cannot be parame
|
28天前
|
Java
Java使用List去重的四中方式
Java使用List去重的四中方式
19 6
|
1月前
Cause: java.sql.SQLIntegrityConstraintViolationException: Column ‘id‘ in field list is ambiguous
Cause: java.sql.SQLIntegrityConstraintViolationException: Column ‘id‘ in field list is ambiguous
18 0
|
1月前
|
Java
JAVA——List中剔除空元素(null)的三种方法汇总
JAVA——List中剔除空元素(null)的三种方法汇总
|
1月前
|
安全 Java API
Java并发 - J.U.C并发容器类 list、set、queue
Queue API 阻塞是通过 condition 来实现的,可参考 Java 并发 - Lock 接口 ArrayBlockingQueue 阻塞 LinkedBlockingQueue 阻塞 ArrayQueue 非阻塞 LinkedQueue 非阻塞
|
1月前
|
存储 安全 Java
【Java】集合(一)单列集合List
【Java】集合(一)单列集合List
22 0
|
1月前
|
Java API
java 对象list 使用stream进行过滤
在Java中,你可以使用Stream API对对象列表进行过滤。假设你有一个`List<MyObject>`,并且你想根据某些条件过滤出特定的对象。以下是一个示例: ```java import java.util.List; import java.util.stream.Collectors; public class Main { public static void main(String[] args) { List<MyObject> myObjects = ... // 初始化你的对象列表 List<MyObject> filter
|
1月前
|
算法 安全 Java
java将list中的某个元素移动位置
【2月更文挑战第12天】