从ArrayList Java中删除Object

时间:2017-12-14 20:11:04

标签: java arraylist

我正在努力使用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处的对象会被另一个对象覆盖?!

提前感谢所有答案!

4 个答案:

答案 0 :(得分:1)

  1. toString()添加到您正在存储的对象中,这将使调试变得更加容易。
  2. 什么都没有被覆盖。这是一个“虚拟”数组。当你删除索引0处的元素时,它右边的每个元素(1,2,...)都会向左移动一个元素。前索引1现在是索引0,前索引2现在是索引1,等。

答案 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)中删除一些时,列表将被压缩!