如何在list集合中删除多个元素

本文探讨了在Java中从List中移除元素时为何需要使用i--操作。通过具体代码示例解释了当使用for循环遍历并删除List中的元素时,为了确保正确地检查每个元素而进行的索引调整。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


for(int i=0;i<mapList.size();i++){
if(!mapList.get(i).getCdepartmentCode().equals(“**”))){
mapList.remove(i);
i--;
}
}

为什么要i--呢?

因为每当list.remove执行后,list的size就会发生变化,并且被删除元素后面的元素会向前移动,如果被删除元素位置是3,删除完毕后,现在3的位置上是之前位置4上的元素,所以需要重新验证3位置上的元素,即i--;

在 C# 中,`List` 类型的删除操作是同步的,这意味着在同一帧中删除多个元素可能会导致性能问题和意外的行为。如果你需要在同一帧中删除多个元素,可以考虑使用 `HashSet` 类型或者使用 `List` 类型的延迟删除。 使用 `HashSet` 类型可以避免同步删除的问题,因为 `HashSet` 类型支持在枚举集合删除元素。以下是一个例子,演示如何使用 `HashSet` 类型在同一帧中删除多个元素: ```csharp HashSet<int> numbers = new HashSet<int>() { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; HashSet<int> numbersToRemove = new HashSet<int>() { 2, 4, 6, 8, 10 }; // 枚举集合删除元素 foreach (int number in numbersToRemove) { numbers.Remove(number); } // 输出剩余元素 foreach (int number in numbers) { Console.WriteLine(number); } ``` 在这个例子中,我们使用 `HashSet` 类型来删除多个元素。我们创建了一个名为 `numbersToRemove` 的 `HashSet` 对象,它包含要删除元素。然后我们在循环中枚举 `numbersToRemove` 集合并从 `numbers` 集合删除每个元素。最后输出剩余的元素。 如果你想继续使用 `List` 类型,你可以使用延迟删除。延迟删除意味着你不会立即删除元素,而是将要删除元素标记为已删除,并在下一帧中才实际删除它们。以下是一个例子,演示如何使用延迟删除来在同一帧中删除多个元素: ```csharp List<int> numbers = new List<int>() { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; List<int> numbersToRemove = new List<int>() { 2, 4, 6, 8, 10 }; // 标记要删除元素 foreach (int number in numbersToRemove) { numbers[number - 1] = -1; } // 删除标记的元素 numbers.RemoveAll(x => x == -1); // 输出剩余元素 foreach (int number in numbers) { Console.WriteLine(number); } ``` 在这个例子中,我们使用一个负数来标记要删除元素。然后,我们使用 `RemoveAll` 方法删除所有标记为负数的元素。在这个例子中,`RemoveAll` 方法将删除 2、4、6、8 和 10,并输出剩余的元素 1、3、5、7 和 9。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值