Enumeration对象还有元素,执行hasMoreElements返回false,内有测试源码
import java.util.Enumeration;
import java.util.Vector;
public class Test {
private int i = 0;
private boolean isBusy;
public Test(int i, boolean isBusy) {
this.i = i;
this.isBusy = isBusy;
}
public static void main(String[] args) {
Vector vector = new Vector();
for (int i = 0; i
vector.addElement(new Test(i, false));
System.out.println("add");
}
Enumeration en = vector.elements();
while (en.hasMoreElements()) {
Test tt = (Test)en.nextElement();
vector.remove(tt);
System.out.println("remove");
//en = vector.elements();
}
}
}
打开注释正常执行10次,关闭却只能执行5次,但是明明en里面还有5个对象,为什么此时执行hasMoreElements()判断却为false,十分不解。
分享到:
------解决方案--------------------
不清楚。感觉上en只是单纯的保存了vector随机访问时的下标i:
1.hasMoreElements()是在比较en中保存的i与vector.size()
2.nextElement()调用了vector.elementAt(i++)
不知道上面的猜测对不对~~~
建议楼主改用ArrayList和Iterator。用Iterator接口的remove方法来删除元素,这样就不会出错了。
------解决方案--------------------
额,elements()的源码:
public Enumeration elements() {
return new Enumeration() {
int count = 0;
public boolean hasMoreElements() {
return count
}
public E nextElement() {
synchronized (Vector.this) {
if (count
return elementData(count++);
}
}
throw new NoSuchElementException("Vector Enumeration");
}
};
}
------解决方案--------------------