`

ArrayList List 等迭代集合执行移除(remove) 操作容易犯的错误

阅读更多

ArrayList List 等迭代集合执行移除(remove) 操作容易犯的错误

 

产生错误原因:迭代集合每次remove后的size都会发生变化,如果迭代基数不根据remove后的size动态调整,则会发生索引越界异常或内容遍历不全等问题,

错误方法1:
    ArrayList<String> al = new ArrayList<String>();
    al.add("1");
    al.add("1");
    al.add("1");
    al.add("1");
    al.add("4");
    al.add("1");
    al.add("6");  
    int size = al.size();
//错误处 会抛出索引越界异常
    for(int i=0;i<size;i++){
     if("1".equals(al.get(i)))
      al.remove(i);
    }

错误方法2:
    ArrayList<String> al = new ArrayList<String>();
    al.add("1");
    al.add("1");
    al.add("1");
    al.add("1");
    al.add("4");
    al.add("1");
    al.add("6");  
    //错误处 会导致内容遍历不完全
    for(int i=0;i<al.size();i++){
     if("1".equals(al.get(i)))
      al.remove(i);
    }

正确方法1:
    ArrayList<String> al = new ArrayList<String>();
    al.add("1");
    al.add("1");
    al.add("1");
    al.add("1");
    al.add("4");
    al.add("1");
    al.add("6");  
//正确
    Iterator<String> it = al.iterator();
    while(it.hasNext()){
     if("1".equals(it.next()))
      it.remove();
    }

正确方法2:
    ArrayList<String> al = new ArrayList<String>();
    al.add("1");
    al.add("1");
    al.add("1");
    al.add("1");
    al.add("4");
    al.add("1");
    al.add("6");
//正确
for (int i = 0; i < al.size(); i++) {
     if ("1".equals(al.get(i))) {
      al.remove(i);
      i--;
     }
    }

分享到:
评论

相关推荐

    集合ArrayList测试集合ArrayList测试集合ArrayList测试

    **方法操作**:`ArrayList`提供了丰富的API,包括`add()`(添加元素)、`remove()`(移除元素)、`get()`(获取指定索引的元素)、`set()`(替换指定索引的元素)、`size()`(返回元素数量)以及`clear()`(清除所有...

    List.removeAll() 方法的性能效率

    在Java编程语言中,`List.removeAll()`方法是一个非常实用的函数,它允许我们从列表中一次性移除所有指定元素。这个方法是集合框架的一部分,它提供了高效的方式来进行元素的删除操作。本文将深入探讨`removeAll()`...

    Java程序员容易犯的10个错误

    本文将针对Java程序员容易犯的10个错误进行详细讲解,帮助大家避免这些陷阱。 1. **Array 转 ArrayList**: 当使用`Arrays.asList()`方法将数组转换为列表时,返回的是`java.util.Arrays.ArrayList`,这是一个内部...

    java集合迭代器Iterator中的remove陷阱

    首先,`Iterator`接口提供了一个`remove()`方法,它的作用是移除当前迭代器指向的元素。在使用`Iterator`遍历集合并删除元素时,需要注意以下几点: 1. **只能通过`Iterator`删除元素**:在Java中,当使用`Iterator...

    java集合类遍历的同时如何进行删除操作.docx

    在Java编程中,集合类遍历的同时进行删除操作是一个常见的需求,但如果不正确地执行,可能会导致`ConcurrentModificationException`。这个问题主要出现在迭代器正在遍历集合时,集合本身被修改的情况。以下是对这个...

    我的ArrayList实现

    ArrayList是Java集合框架中的一员,它是List接口的一个具体实现,以动态数组的形式存储元素。ArrayList的实现原理、操作方法以及在实际编程中的应用都是Java程序员必须掌握的重要知识点。 首先,ArrayList的底层...

    c版的arraylist

    5. **删除元素**:`remove`方法用于根据索引移除元素,并调整后续元素的位置。 ```c void arrayListRemove(ArrayList *list, int index); ``` 6. **获取元素**:`get`方法返回指定索引处的元素。 ```c void *...

    模拟java ArrayList Iterator

    在Java中,ArrayList类继承自AbstractList接口,并实现了List接口,提供了丰富的操作方法,如add、remove、get等。 Iterator设计模式是一种行为设计模式,它的主要作用是为集合提供一种顺序访问元素的方式,而无需...

    list遍历集合源码

    首先,List接口定义了一系列方法,如`add(E element)`用于添加元素,`remove(int index)`用于移除指定位置的元素,以及`get(int index)`用于获取指定位置的元素等。这些方法的实现由具体的List实现类来完成,例如...

    javalist.zip_list集合 java

    在Java中,List接口提供了一系列的方法,如add()用于添加元素,get()用于获取指定索引处的元素,remove()用于移除元素,contains()用于检查列表是否包含特定元素,size()返回列表中的元素数量。此外,迭代器Iterator...

    arrayliSt---listDemo

    在Java编程语言中,ArrayList是集合框架中一个重要的类,属于List接口的实现。ArrayList主要用于存储有序的、可变大小的元素序列。本示例"arrayliSt---listDemo"显然是一个关于ArrayList基本操作和使用的演示。下面...

    Java集合容器面试题

    Collection接口是所有集合类的父接口,提供了基本的集合操作方法,如add、remove、contains等。 List接口 List接口是Collection接口的子接口,提供了有序的集合操作方法,如get、set、add等。 迭代器Iterator是...

    JavaSE专题-List集合.doc

    【JavaSE专题-List集合】 Java集合框架是Java API的核心组件之一,主要用于存储和操作对象。List集合是其中的一个重要接口,它代表了一个有序的、允许元素重复的序列。List接口扩展了Collection接口,提供了更丰富...

    Java中ArrayList类的用法知识.pdf

    Java中的ArrayList类是Java集合框架的一部分,它是List接口的一个实现,主要用于存储可变大小的有序对象集合。ArrayList基于数组实现,允许动态地增加或减少元素,提供了丰富的操作方法,适用于需要频繁增删元素的...

    Java迭代器模式:遍历集合的优雅之舞

    1. **迭代器接口(Iterator Interface)**:定义了访问和遍历容器中元素的基本操作,通常包括`hasNext()`、`next()`和`remove()`等方法。 2. **具体迭代器(Concrete Iterator)**:实现了迭代器接口,负责实际的...

    JAVA中常用的集合类型

    List 接口的实现类有 ArrayList、LinkedList、Stack 和 Vector 等集合类。 * Map(映射):代表一个键值对的集合。 List 接口 List 接口代表一个有序的集合,可以对 List 接口代表的有序集合中每个元素的插入位置...

    ArrayList类[文].pdf

    ArrayList是Java编程语言中一种非常基础且常用的集合类,它属于`java.util.ArrayList`包,是List接口的一个实现。ArrayList的本质是一个动态数组,允许我们存储和操作任意类型的对象。由于ArrayList是基于数组实现的...

    java关键字ArrayList详解

    ArrayList是Java集合框架中的一种重要实现,它是List接口的一个具体类,主要特点是基于数组实现,提供了灵活的元素存储和操作。ArrayList支持动态扩容,可以根据需要自动增加数组的大小,这使得在不知道确切元素数量...

    JSP应用开发-Java集合类-List接口.pptx

    List接口是Collection的子接口,用来包含一组有序有重复的对象,List有两种主要的集合实现类:ArrayList和LinkedList。ArrayList适合随机查询的场合,而LinkedList元素的插入和删除操作性高,两者在实际应用中都有其...

    集合类(二):List集合

    在Java编程语言中,集合框架是处理对象集合的重要工具,其中List集合是广泛使用的接口之一。List接口继承自Collection接口,它定义了一种有序的、允许重复元素的集合。本篇我们将深入探讨List集合,包括其特点、常用...

Global site tag (gtag.js) - Google Analytics