`
mtnt2008
  • 浏览: 369611 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

List的remove元素时注意的问题

F# 
阅读更多

 

List遍历,去除不符合条件的元素,代码如下:

 

 

private List<Product> getProductSet(List<Product> products) {
		for (int i = 0; i < products.size(); i++) {
			if (!hasPrice(products.get(i))) {
				products.remove(i);
			}
		}
		return products;
	}

 

但是结果却不是把符合条件的元素去除了,原因如下:

 

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

 

所以,正确的去除符合条件的元素代码如下:

 

private List<Product> getProductSet(List<Product> products) {
		for (int i = products.size() - 1; i > -1 ; i--) {
			if (!hasPrice(products.get(i))) {
				products.remove(i);
			}
		}
		return products;
	}

 

问题补充:

 

如果使用Arrays.asList(),然后对list使用remove,add等方法,将发生java.lang.unsupportedoperationexception,所以,

必须自己写一个数组到List的转换方法,如下:

 

private static List<File> castArrayToList(File[] files) {
		List<File> fs = new ArrayList<File>();
		for (File f : files) {
			fs.add(f);
		}
		return fs;
	}
 
分享到:
评论

相关推荐

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

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

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

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

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

    在C++编程中,`list` 是一个关联容器,提供了双向链表的实现。这篇文章主要讲解了`...在删除元素时,务必注意迭代器的失效问题,避免产生未定义的行为。同时,`remove`和`erase`的组合使用可以简化清除特定值的操作。

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

    如 `@{listnew} Remove Duplicates ${list}` 创建一个没有重复元素的新列表,并通过 `List Should Not Contain Duplicates ${listnew}` 检查新列表是否不包含重复项。 5. **List Should Contain Sub List**: 检查一...

    STL中list的使用

    在标准模板库(STL)中,`list`容器是一个双向链表,它提供了高效的插入和删除操作,尤其是在列表的头部或尾部进行操作时,性能尤为突出。下面将详细介绍`list`的各种功能和用法。 ### 创建和初始化 1. **空list**...

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

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

    在list集合中输入元素,去除重复的元素并输出

    需要注意的是,这里使用`iterator.remove()`而不是`list.remove()`来删除元素,这可以避免并发修改异常。 ### 三、使用HashSet特性去除重复元素 这种方法利用了HashSet的特性,即HashSet不允许有重复的元素。将...

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

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

    C# List用法

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

    Java 实例 - List 循环移动元素源代码+详细指导教程.zip

    需要注意的是,当元素被移除后,如果还在遍历过程中,记得更新当前的索引,否则可能会错过其他元素。 此外,还有其他更复杂的移动策略,例如使用Collections.swap()方法交换元素的位置,或者在特定条件下调整整个...

    C# List用法详解

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

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

    如果在多线程环境中操作集合,需要注意线程安全问题,可能需要使用`CopyOnWriteArrayList`或其他同步容器,或者对比较过程进行同步控制。 通过理解并熟练运用这些方法,我们可以有效地比较和操作两个List集合,...

    C#_StringList的用法

    这是因为 ArrayList 需要在添加和删除元素时动态调整数组的大小。 三、添加元素: ArrayList 提供了多种添加元素的方法,包括: 1. public virtual int Add(object value):将对象添加到 ArrayList 的结尾处。 ...

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

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

    python list删除元素时要注意的坑点分享

    然而,在处理列表时,特别是在删除元素时,如果不注意一些细节,可能会遇到意想不到的问题。本文将深入探讨Python列表删除元素时需要注意的一些陷阱,并提供解决这些问题的方法。 首先,让我们来看一个常见的错误...

    Python列表list内建函数用法实例分析【insert、remove、index、pop等】

    #### 插入与移除元素:`insert()`与`remove()` 在处理Python列表时,我们经常会遇到需要插入或移除元素的情况。`insert()`函数允许我们在列表中的任意位置插入一个新元素,而`remove()`函数则用于移除列表中的指定...

    javaList的定义和方法

    - 当需要保持元素插入顺序,并且可能需要根据索引访问或操作元素时,使用`List`接口及其实现类。 - `List`接口中的方法`add`, `remove`, `set`等操作可能会影响迭代器,因此在遍历列表时应避免修改列表,除非使用`...

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

    最后,当原始列表为空时,所有元素都被随机插入新列表,此时返回`sortedList`即可得到随机排序后的列表。 这种方法简单易懂,但需要注意的是,由于每次插入都会遍历新列表,所以时间复杂度是O(n^2)。对于大规模数据...

    list常用方法

    在Java编程语言中,`List`接口是集合框架的重要组成部分,它提供了有序元素集合的实现,并允许重复元素的存在。本文将详细解释`List`接口中的常用方法,帮助开发者更好地理解和运用这些功能强大的工具。 #### 1. ...

Global site tag (gtag.js) - Google Analytics