public class removeText {
public static void main(String[] args) {
Collection c = new ArrayList();
String s1 = new String("hello");
c.add(s1);
String s2 = new String ("hello");
c.remove(s2);
System.out.println(c.size());
}
}
问:上述代码的结果是什么?
答案:0
为什么我们向集合中加入了s1没加入s2,但是还能在remove(s2)的同时将s1移除了呢?
原因很简单,remove()方法和contains()方法一样,底层都实现了equals()方法。
s1.equals(s2)的结果是true。
值得注意的是:如果用集合的remove()方法将集合元素删除之后,集合的结构发生了变化,此时应该重新获取迭代器,否则会发生错误!!!!
public class removeText {
public static void main(String[] args) {
Collection c = new ArrayList();
String s1 = new String("hello");
c.add(s1);
String s2 = new String ("abc");
c.add(s2);
String s3 = new String ("eee");
c.add(s3);
Iterator it = c.iterator();
while(it.hasNext()){
Object o = it.next();
c.remove(o);
System.out.println(o);
}
}
}
原因:通过集合删除元素之后,迭代器并没有改变,导致迭代器和集合状态不同,出现异常
迭代器就像照片,而集合就像现实,现实改变了但照片不变。为了让状态同步,我们可以再重现拍一张照片!
另外,我们可以使用迭代器中的remove()方法删除元素,这种方法类似于批图技术。



