当我从ArrayList中删除对象时,指针会发生什么情况?

时间:2019-01-10 05:05:28

标签: java pointers arraylist

例如,假设我有以下代码:

ArrayList<String> A1 = new ArrayList<>();
A1.add("Hello");
A1.add("World");
A1.add("!");

然后我执行以下操作:

A1.remove(2);

所以A1现在是[“ Hello”,“ World”]。

但是编译器如何执行此操作?指向“!”的指针将是什么?在执行删除操作之前要指向什么?显然,A1.get(2)现在是非法操作,将导致IndexOutOfBounds异常,并且A1.size =2。分配给列表的第3个插槽的空间在内存中发生了什么?如何在较低级别处理所有这些内容? ?

谢谢!

1 个答案:

答案 0 :(得分:3)

ArrayList在内部创建数组并在其中存储数据。当您从ArrayList中删除元素时:

  • 如果它是最后一个元素,它将在数组的最后一个索引中放置null。
  • 如果它不是最后一个元素,它将把所有元素从index + 1移到左1位。并且在最后一个索引中将放置null。

因此,一旦将数组的特定索引设置为null,则放置在该对象上的对象将被取消引用(如果同一对象未被其他引用引用),则可用于垃圾回收器。

在您的情况下,在第二个索引处将放置null并显示“!”变得不被引用。因此它将可用于垃圾收集器。