我正在努力使用ArrayList的删除方法。我尝试了index和Object方法,以便从列表中删除我的对象。 ArrayList中的对象和对象本身是相同的,因为它们的堆栈地址是相同的。以下代码:
System.out.println("ObjectinList i: " + arraylist.get(i));
System.out.println("ObjectToDelete 0: " + someClass.getsomeArray().get(0));
somearraylist.remove(someclass.getsomeArray().get(0));
System.out.println("VL i: " + arraylist.get(i));
提供以下输出:
ObjectinList i: someClass@599c4975
ObjectToDelete 0: someClass@599c4975
ObjectinList i: someClass@68e60073
显然,当移除时,位置i处的对象会被另一个对象覆盖?!
提前感谢所有答案!
答案 0 :(得分:1)
toString()
添加到您正在存储的对象中,这将使调试变得更加容易。答案 1 :(得分:1)
ArrayList基于equals(Object obj)方法删除对象。所以你应该正确实现这个方法。类似的东西:
public boolean equals(Object obj) {
if (obj == null) return false;
if (obj == this) return true;
if (!(obj instanceof ArrayTest)) return false;
ArrayTest o = (ArrayTest) obj;
return o.i == this.i;
}
在你的对象类
中答案 2 :(得分:0)
引用remove
's javadoc(为强调添加了粗体):
删除此列表中指定位置的元素(可选操作)。 向左移动任何后续元素(从索引中减去一个)。返回从列表中删除的元素。
即,第二次调用get(i
)会在删除元素i+1
之前返回位置i
的元素。
答案 3 :(得分:0)
没有任何问题:它有效! 当您从列表中删除节点(来自ArrayList的Object)时,在列表中的相同位置会有另一个Object,您删除的下一个对象!当您从List(ArrayList或LinkedList)中删除一些时,列表将被压缩!