【发布时间】:2012-02-01 14:11:29
【问题描述】:
我试图在同一个循环中使用不同的方法从对象集合的数组列表中添加和删除,我的问题是在添加和删除之后我尝试打印我的数组列表但我无法获得添加的值最近。我正在使用 ListIterator 添加和使用 Iterator 删除,因为我在一堆网站中读到这是添加和删除的唯一方法,并且更改将直接在 arraylist 中进行,但我的问题是它正在添加和删除并且调试器上的数组列表计数或参考号看起来不错,但是当我搜索它时,我找不到新的。添加了对象,我仍然找到已删除的对象。 这是删除和添加方法
public void RemoveFromAnimalList(Animal A) {
Iterator<Animal> i = AnimalList.iterator();
while (i.hasNext()) {
if (A == i.next()) {
i.remove();
}
}
}
public boolean AddNewAnimalList(Animal A) {
ListIterator litr = AnimalList.listIterator();
Animal B = null;
while (litr.hasNext()) {
B = (Animal) litr.next();
litr.add(A);
return true;
}
return false;
}
这是调用上面这些方法的方法,我已经尝试了所有方法并调试了所有方法,每次我都找不到新的 add 元素,即使 arraylist 编号看起来正确,我有 400 个对象,当我删除它时,它达到 399,然后当我再次添加它时,它又回到了 400,但是当我尝试打印并浏览对象时,我找不到新的对象。
public void FirstBirth() {
TheXYAxisControl XYSave = null;
int X = 0;
int Y = 0;
for (Animal A : AnimalList) {
if (A.Type.equals("Empty")) {
X = A.XAxis;
Y = A.YAxis;
XYSave = new TheXYAxisControl(X, Y);
TheXYaxisArrayList.add(XYSave);
}
}
Random RandomNumberGen = new Random();
for (int s = 0; s < 3; s++) {
int RandomNumberGenerator = RandomNumberGen.nextInt(TheXYaxisArrayList.size());
Animal NewAnimal = new Animal(0, "Male", 0, TheXYaxisArrayList.get(RandomNumberGenerator).getX(), TheXYaxisArrayList.get(RandomNumberGenerator).getY(), 0);
RemoveFromAnimalList(AnimalList.get(RandomNumberGenerator));
AddNewAnimalList(NewAnimal);
RemoveFromOtherList(TheXYaxisArrayList.get(RandomNumberGenerator));
}
int RandomNumberGenerator = RandomNumberGen.nextInt(TheXYaxisArrayList.size());
Animal NewAnimal = new Animal(0, "Female", 0, TheXYaxisArrayList.get(RandomNumberGenerator).getX(), TheXYaxisArrayList.get(RandomNumberGenerator).getY(), 0);
RemoveFromAnimalList(AnimalList.get(RandomNumberGenerator));
AddNewAnimalList(NewAnimal);
RemoveFromOtherList(TheXYaxisArrayList.get(RandomNumberGenerator));
}
如果您有任何问题或代码的其他部分我可以解释。
【问题讨论】:
-
为什么不用arraylist的remove方法呢?
-
仅供参考,您的方法和变量名称应以小写字母开头,这有助于将它们与对象区分开来。
标签: java arraylist iterator add