例如,假设我有以下代码:
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个插槽的空间在内存中发生了什么?如何在较低级别处理所有这些内容? ?
谢谢!
答案 0 :(得分:3)
ArrayList在内部创建数组并在其中存储数据。当您从ArrayList中删除元素时:
因此,一旦将数组的特定索引设置为null,则放置在该对象上的对象将被取消引用(如果同一对象未被其他引用引用),则可用于垃圾回收器。
在您的情况下,在第二个索引处将放置null并显示“!”变得不被引用。因此它将可用于垃圾收集器。