原文地址:
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--;
}
}
分享到:
相关推荐
在Java编程语言中,`List.removeAll()`方法是一个非常实用的函数,它允许我们从列表中一次性移除所有指定元素。这个方法是集合框架的一部分,它提供了高效的方式来进行元素的删除操作。本文将深入探讨`removeAll()`...
**方法操作**:`ArrayList`提供了丰富的API,包括`add()`(添加元素)、`remove()`(移除元素)、`get()`(获取指定索引的元素)、`set()`(替换指定索引的元素)、`size()`(返回元素数量)以及`clear()`(清除所有...
本文将针对Java程序员容易犯的10个错误进行详细讲解,帮助大家避免这些陷阱。 1. **Array 转 ArrayList**: 当使用`Arrays.asList()`方法将数组转换为列表时,返回的是`java.util.Arrays.ArrayList`,这是一个内部...
首先,`Iterator`接口提供了一个`remove()`方法,它的作用是移除当前迭代器指向的元素。在使用`Iterator`遍历集合并删除元素时,需要注意以下几点: 1. **只能通过`Iterator`删除元素**:在Java中,当使用`Iterator...
在Java编程中,集合类遍历的同时进行删除操作是一个常见的需求,但如果不正确地执行,可能会导致`ConcurrentModificationException`。这个问题主要出现在迭代器正在遍历集合时,集合本身被修改的情况。以下是对这个...
ArrayList是Java集合框架中的一员,它是List接口的一个具体实现,以动态数组的形式存储元素。ArrayList的实现原理、操作方法以及在实际编程中的应用都是Java程序员必须掌握的重要知识点。 首先,ArrayList的底层...
在Java编程语言中,`ArrayList`是`java.util`包中的一个重要集合类,它提供了动态数组的功能。这个数据结构允许我们存储、访问和管理一组元素。而在C语言中,由于没有内置的类似集合的数据类型,程序员需要自定义...
Collection接口是所有集合类的父接口,提供了基本的集合操作方法,如add、remove、contains等。 List接口 List接口是Collection接口的子接口,提供了有序的集合操作方法,如get、set、add等。 迭代器Iterator是...
在Java中,ArrayList类继承自AbstractList接口,并实现了List接口,提供了丰富的操作方法,如add、remove、get等。 Iterator设计模式是一种行为设计模式,它的主要作用是为集合提供一种顺序访问元素的方式,而无需...
首先,List接口定义了一系列方法,如`add(E element)`用于添加元素,`remove(int index)`用于移除指定位置的元素,以及`get(int index)`用于获取指定位置的元素等。这些方法的实现由具体的List实现类来完成,例如...
Java中的ArrayList类是Java集合框架的一部分,它是List接口的一个实现,主要用于存储可变大小的有序对象集合。ArrayList基于数组实现,允许动态地增加或减少元素,提供了丰富的操作方法,适用于需要频繁增删元素的...
在Java中,List接口提供了一系列的方法,如add()用于添加元素,get()用于获取指定索引处的元素,remove()用于移除元素,contains()用于检查列表是否包含特定元素,size()返回列表中的元素数量。此外,迭代器Iterator...
在Java编程语言中,ArrayList是集合框架中一个重要的类,属于List接口的实现。ArrayList主要用于存储有序的、可变大小的元素序列。本示例"arrayliSt---listDemo"显然是一个关于ArrayList基本操作和使用的演示。下面...
ArrayList是Java编程语言中一种非常基础且常用的集合类,它属于`java.util.ArrayList`包,是List接口的一个实现。ArrayList的本质是一个动态数组,允许我们存储和操作任意类型的对象。由于ArrayList是基于数组实现的...
【JavaSE专题-List集合】 Java集合框架是Java API的核心组件之一,主要用于存储和操作对象。List集合是其中的一个重要接口,它代表了一个有序的、允许元素重复的序列。List接口扩展了Collection接口,提供了更丰富...
- `remove()`:从集合中移除迭代器返回的最后一个元素。 #### 1.3 List List是一种有序集合,它允许重复元素,并且保持插入顺序。List是最常用的集合类型之一,因为它提供了丰富的功能和良好的性能。 ##### 1.3.1...
1. **迭代器接口(Iterator Interface)**:定义了访问和遍历容器中元素的基本操作,通常包括`hasNext()`、`next()`和`remove()`等方法。 2. **具体迭代器(Concrete Iterator)**:实现了迭代器接口,负责实际的...
ArrayList是Java集合框架中的一种重要实现,它是List接口的一个具体类,主要特点是基于数组实现,提供了灵活的元素存储和操作。ArrayList支持动态扩容,可以根据需要自动增加数组的大小,这使得在不知道确切元素数量...
List 接口的实现类有 ArrayList、LinkedList、Stack 和 Vector 等集合类。 * Map(映射):代表一个键值对的集合。 List 接口 List 接口代表一个有序的集合,可以对 List 接口代表的有序集合中每个元素的插入位置...
5. 方法丰富:ArrayList提供了许多实用的方法,如Add、Insert、Remove、Clear等,便于对集合进行操作。例如,Add方法用于向ArrayList末尾添加元素,Insert方法可以在指定位置插入元素,Remove方法移除指定元素,而...