`
uule
  • 浏览: 6352940 次
  • 性别: Icon_minigender_1
  • 来自: 一片神奇的土地
社区版块
存档分类
最新评论

使用List中remove方法时需要注意的问题

阅读更多
		String str1 = new String("1");
		String str2 = new String("2");
		String str3 = new String("3");
		String str4 = new String("4");
		String str5 = new String("5");
		List list = new ArrayList();
		list.add(str1);
		list.add(str2);
		list.add(str3);
		list.add(str4);
		list.add(str5);
		System.out.println("list.size()=" + list.size());		
		
		for (int i = 0; i < list.size(); i++) {				
				list.remove(i);			
			//	i--;
			//System.out.println(i+" "+list.get(i)+" ");
		}		
		System.out.println("after remove:list.size()=" + list.size());

 本来预期结果应该是:

list.size()=5
after remove:list.size()=0

 但实际上结果却是:

list.size()=5
after remove:list.size()=2

 

原因如下: List每remove掉一个元素以后,后面的元素都会向前移动 此时如果执行i++,则刚刚移过来的元素没有被读取。


分析:

List中有5条数据,需要循环5次,

第一次数据为:1 2 3 4 5

       执行完remove(0) 后,数据为 2 3 4 5  , i=1

第二次数据为:2 3 4 5

       执行完remove(1) 后,数据为 2 4 5  , i=2

第三次数据为:2 4 5

       执行完remove(2) 后,数据为 2 4  , i=3

此时如果加上上面注释的代码 System.out.println(i+" "+list.get(i)+" "); 循环第4、5次时就会出现异常

 

解决方法1:

   每移过一次后,再把 i 移回来

for (int i = 0; i < list.size(); i++) {				
				list.remove(i);			
				i--;			
		}	

 

解决方法2:

    先删除后面的元素

for (int i = list.size()-1; i >= 0; i--) {				
			list.remove(i);			    
		}	

 解决方法3:

    iterator式删除(貌似会有问题)

for(Iterator it = list.iterator();it.hasNext();){			
			it.remove();
		}

 

部分参考:http://java.chinaitlab.com/base/821113.html

 

分享到:
评论

相关推荐

    list用remove实现结构体成员的删除

    在处理复杂的数据操作时,我们可能需要从列表中删除特定的元素,这可以通过 `remove()` 方法来实现。本篇文章将深入探讨如何使用 `remove()` 方法来删除结构体成员,即包含多个属性的对象实例。 首先,我们需要理解...

    Java list.remove( )方法注意事项

    在使用`remove()`方法时,需要注意一些重要的细节以避免潜在的问题和错误。下面将详细介绍`List.remove()`方法的两种用法及其注意事项。 首先,`remove(int index)`方法用于根据提供的索引从列表中移除一个元素。...

    基于C++ list中erase与remove函数的使用详解

    通过`push_back`方法添加元素,然后可以使用`remove`或`erase`来管理链表中的元素。 总结,理解和正确使用`list`的`erase`和`remove`函数是C++程序员必备的技能。在删除元素时,务必注意迭代器的失效问题,避免产生...

    C#遍历List并删除某个元素的方法

    当我们需要遍历List并根据条件删除特定元素时,需要注意正确的方法,以避免在遍历过程中出现错误。以下将详细介绍如何在C#中遍历List并删除元素,包括正序和倒序遍历的技巧。 首先,我们来看一下错误的遍历方式。...

    STL中list的使用

    在标准模板库(STL)中,`list`容器是一个双向链表,它提供了高效的插入和删除操作,尤其是在列表的头部或尾部进行操作时,性能尤为突出。...通过掌握上述介绍的方法,可以高效地使用`list`来解决实际问题。

    ArrayList在for循环中使用remove方法移除元素方法介绍

    在ArrayList中使用remove方法移除元素时,需要注意元素索引的变化。使用倒序删除的方法可以避免元素索引的错乱,从而正确地删除ArrayList中的元素。 扩展知识 * ArrayList的 remove 方法 * for 循环的使用 * 倒序...

    list常用方法

    本文将详细解释`List`接口中的常用方法,帮助开发者更好地理解和运用这些功能强大的工具。 #### 1. 创建List实例 ```java List&lt;E&gt; list = new ArrayList(); ``` 这里创建了一个基于`ArrayList`实现的`List`对象,...

    RemoveDrive卸载U盘或者移动硬盘

    在"Readme使用方法.txt"中,通常会详细介绍这些命令的使用细节、可能遇到的问题及解决方法,以及其它高级选项,如静默模式、排除特定设备等。确保在使用前详细阅读,以避免误操作。 使用RemoveDrive要注意的是,...

    javaList的定义和方法

    - `List`接口中的方法`add`, `remove`, `set`等操作可能会影响迭代器,因此在遍历列表时应避免修改列表,除非使用`Iterator`的`remove()`方法。 - `List`接口还提供了一些其他的方法,如`contains()`, `indexOf()`, ...

    【Robotframework】列表List的常用操作.pdf

    需要注意的是,Robot Framework中的列表用`@{list}`表示,而Python中用`$list`。比较两个`@{list}`时,直接写成`$list`。例如,`Lists Should Be Equal ${list} ${list1}` 判断两个列表是否相同。 8. **Remove From...

    C#对list列表进行随机排序的方法

    当需要对列表中的元素进行随机排序时,可以采用多种方法。这里我们重点介绍一种基于`Random`类的方法,如标题和描述中所述。这种方法通过创建一个随机数生成器并在循环中插入元素来实现随机排序的效果。 首先,我们...

    Python如何在循环内使用list.remove()

    当在循环中使用`list.remove()`时,需要注意列表的长度会在每次调用该方法时减少1。这会导致循环的索引失效或跳过某些元素。例如: ```python dat = ['1', '2', '3', '0', '0', '0'] for item in dat: if item == ...

    测试listBox1.Items.Remove是用ToString还是利用gethashCode来定位元素的

    在处理`ListBox`的数据操作时,我们可能会遇到需要移除特定元素的情况。标题提到的“测试`listBox1.Items.Remove`是用`ToString`还是利用`GetHashCode`来定位元素”,实际上涉及到两种不同的方法来确定元素身份。 1...

    C# List用法

    C# List是.NET Framework...需要注意的是,虽然List提供了强大的功能,但是性能问题仍然是开发者需要注意的地方,尤其是当处理大量数据且数据类型为值类型时。合理选择数据结构和方法,可以有效避免不必要的性能开销。

    两个list比较 取不同的对象

    - 示例代码中使用了`Iterator`来遍历最终结果列表,并打印出每个学生的学号。 #### 示例代码分析 根据给出的部分内容,我们可以看到以下关键步骤: 1. **初始化两个列表**: - 第一个列表`list`包含四个`...

    C#_StringList的用法

    4. 可以灵活访问元素:ArrayList 提供了多种访问元素的方法,可以根据需要访问数组中的任意元素。 二、局限性: 跟一般的数组比起来,ArrayList 的速度相对较慢。这是因为 ArrayList 需要在添加和删除元素时动态...

    两个集合比较(新增、编辑、删除)

    本文将深入探讨如何比较两个集合,并关注在Java中使用List进行对比时的“新增”、“编辑”和“删除”操作。首先,我们需要理解集合的基本概念。集合是存储一组元素的数据结构,而List是一种有序的集合,允许重复元素...

    深入了解Python中pop和remove的使用方法

    在循环中使用这些方法时,要注意它们对原列表的影响,避免使用可能导致迭代错误的直接修改操作。通过创建新列表或使用切片来避免这些问题,可以使代码更加健壮。在编写涉及列表修改的代码时,理解这些细节至关重要,...

    C# List用法详解

    需要注意的是,在选择使用IList还是ArrayList类时,需要考虑性能和类型安全性问题。如果使用IList,那么在大多数情况下执行速度更快、更加类型安全,但如果使用值类型,则需要考虑装箱和取消装箱问题。

    Python中列表list以及list与数组array的相互转换实现方法

    本文主要介绍了Python中列表(`list`)以及列表与数组(`array`)之间的相互转换方法。列表是Python中最基础的数据结构之一,支持灵活地添加和删除元素。数组则更适合于数值计算,提供更高效的内存管理和运算性能。通过...

Global site tag (gtag.js) - Google Analytics