`
zsj01005432
  • 浏览: 43111 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

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

    博客分类:
  • java
 
阅读更多
原文地址:http://hi.baidu.com/chenqqabcd/item/0af645c583596714515058b3

产生错误原因:迭代集合每次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--;
     }
    }
分享到:
评论

相关推荐

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

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

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

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

    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

    在Java编程语言中,`ArrayList`是`java.util`包中的一个重要集合类,它提供了动态数组的功能。这个数据结构允许我们存储、访问和管理一组元素。而在C语言中,由于没有内置的类似集合的数据类型,程序员需要自定义...

    Java集合容器面试题

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

    模拟java ArrayList Iterator

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

    list遍历集合源码

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

    Java中ArrayList类的用法知识.pdf

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

    javalist.zip_list集合 java

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

    arrayliSt---listDemo

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

    ArrayList类[文].pdf

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

    JavaSE专题-List集合.doc

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

    Java集合Collection、List、Set、Map使用详解

    - `remove()`:从集合中移除迭代器返回的最后一个元素。 #### 1.3 List List是一种有序集合,它允许重复元素,并且保持插入顺序。List是最常用的集合类型之一,因为它提供了丰富的功能和良好的性能。 ##### 1.3.1...

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

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

    java关键字ArrayList详解

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

    JAVA中常用的集合类型

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

    C#学习资料关于arraylist的应用举例

    5. 方法丰富:ArrayList提供了许多实用的方法,如Add、Insert、Remove、Clear等,便于对集合进行操作。例如,Add方法用于向ArrayList末尾添加元素,Insert方法可以在指定位置插入元素,Remove方法移除指定元素,而...

Global site tag (gtag.js) - Google Analytics