62,635
社区成员




import java.util.*;
public class Test_1
{
public static void main(String[] args)
{
List<String> a = new LinkedList<String>();
a.add("abc");
a.add("eee");
a.add("ooo");
a.add("fff");
Iterator<String> aa = a.iterator();
while(aa.hasNext())
{
aa.next();
aa.remove(); //此处用跌代器来移除,成功了。
}
System.out.println(a);
}
}
import java.util.*;
public class Test_1
{
public static void main(String[] args)
{
List<String> a = new LinkedList<String>();
a.add("abc");
a.add("eee");
a.add("ooo");
a.add("fff");
Iterator<String> aa = a.iterator();
while(aa.hasNext())
{
String x = aa.next();
a.remove(x); //此处用集合中的remove来移除,为什么不成功?
}
System.out.println(a);
}
}
import java.util.*;
public class Test_1
{
public static void main(String[] args)
{
List<String> a = new LinkedList<String>();
a.add("abc");
a.add("eee");
a.add("ooo");
a.add("fff");
a.remove("eee");
a.remove("ooo");
System.out.println(a);
a.remove(0);
System.out.println(a);
}
}
我也在寻找区别中,下标remove好像是list中的,而字符串形式是collection中的,我自己也还在糊涂中。
public boolean remove(Object o) {
//二者都是通过寻找该元素实现删除的
if (o == null) {
for (Node<E> x = first; x != null; x = x.next) {
if (x.item == null) {
//看看unlink
unlink(x);
return true;
}
}
} else {
for (Node<E> x = first; x != null; x = x.next) {
if (o.equals(x.item)) {
unlink(x);
return true;
}
}
}
return false;
}
E unlink(Node<E> x) {
// assert x != null;
final E element = x.item;
//确定前后
final Node<E> next = x.next;
final Node<E> prev = x.prev;
if (prev == null) {//如果是第一个元素
first = next;
} else {
//将前一个元素的后指针指向他的后一个元素
prev.next = next;
//该元素不再有前置指针
x.prev = null;
}
if (next == null) {//如果是最后一个元素
last = prev;
} else {
//将后一个元素的前指针指向自己的前一个元素。
next.prev = prev;
//该元素不再有后置指针
x.next = null;
}
//再将该元素置空
x.item = null;
size--;
modCount++;
return element;
}
此处
Iterator<String> aa = a.iterator();
while(aa.hasNext())
{
String x = aa.next();
a.remove(x);
}
你在遍历该list的时候删除list中元素。影响了同步。
异常原因:
系统通过Iterator去操纵list。list元素被删,iterator中先后顺序必然被打乱。一直下去会出现空指针异常等很多异常。不如最开始就抛出