我正在尝试添加和删除同一循环中的对象集合的arraylist但在不同的方法中我的问题是在添加和删除后我尝试打印我的数组列表但我无法获取添加的值最近。我正在使用ListIterator添加和Iterator删除,因为我在一堆网站上读到这是添加和删除的唯一方法,更改将直接在arraylist中进行但我的问题是它是添加和删除调试器上的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;
}
这是调用上述方法的方法,我已经尝试了一切并调试了所有内容,每次我都找不到新的添加元素,尽管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));
}
如果您有任何问题或代码的其他部分,我可以解释。
答案 0 :(得分:1)
你应该在Collection,List,Iterator,ListIterator等中使用Java泛型并避免强制转换。
此外,您在此处与==
符号进行比较:
if (A == i.next())
这只是比较2个参考文献。将其更改为:
if (A.equals(i.next()))
答案 1 :(得分:0)
首先提出一些关于Java中代码外观的建议
问题可能在于您没有比较对象的相等性,而只是它们是同一个对象。
对象类型上使用的运算符==
比较实例。换句话说,这将比较对象所分配的内存的引用。
如果我们要比较它们具有相同内容的对象,我们应该使用方法equals(Object object)
所以将if (A == i.next())
替换为if (A.equals(i.next()))
。
此外,一个好的做法是将常量与值进行比较,因此A.Type.equals("Empty")
应该是"Empty".equals(A.Type)
而不是{{1}}。这种做法可能会减少代码中不需要的NullPointerExceptions。