[转]List remove 时的小问题 import java.util.*;

2008-05-09 18:00 java List remove 时的小问题 import java.util.*;
public class object {
public static void main(String[] args) {
String str1 = new String("abcde");
String str2 = new String("abcde");
String str3 = new String("abcde");
String str4 = new String("abcde");
String str5 = new String("abcde");
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++) {
if (((String) list.get(i)).startsWith("abcde")) {
list.remove(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=i+1,则刚刚移过来的元素没有被读取。

解决方法:

1.倒过来遍历list

for (int i = list.size()-1; i > =0; i--) {
if (((String) list.get(i)).startsWith("abcde")) {
list.remove(i);
}
}

2.每移除一个元素以后再把i移回来

for (int i = 0; i < list.size(); i++) {
if (((String) list.get(i)).startsWith("abcde")) {
list.remove(i);
i=i-1;

}
}
`import java.util.Iterator;` 是Java语言中用于导入`Iterator`接口的语句。`Iterator`接口位于`java.util`包中,它提供了一种方法来访问集合(Collection)对象的每一个元素,而不必关心集合的内部结构。 `Iterator`接口主要包含以下方法: 1. `boolean hasNext()`:用于检查是否存在下一个元素,如果存在则返回`true`,否则返回`false`。 2. `E next()`:返回集合中的下一个元素,并将迭代器的位置移动到下一个元素。 3. `void remove()`:删除由`next()`方法返回的最后一个元素,此方法必须在调用`next()`之后才能使用,否则会抛出`IllegalStateException`异常。 使用`Iterator`可以安全地在遍历集合的过程中修改集合(例如删除元素),这是因为迭代器在遍历集合能够提供一种结构性的遍历方式,这比直接使用索引或计数器来遍历集合更安全。 下面是一个简单的使用`Iterator`遍历`List`集合的示例代码: ```java import java.util.ArrayList; import java.util.Iterator; public class IteratorExample { public static void main(String[] args) { ArrayList<String> list = new ArrayList<>(); list.add("元素1"); list.add("元素2"); list.add("元素3"); Iterator<String> iterator = list.iterator(); while(iterator.hasNext()) { String element = iterator.next(); System.out.println(element); // 可以在此处安全地删除元素 // iterator.remove(); } } } ``` 在这个示例中,我们创建了一个`ArrayList`集合,并添加了三个字符串元素。然后我们通过`iterator()`方法获取了`Iterator`实例,并使用`while`循环遍历集合。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值