在Java中,当有一些非空的ArrayList时,
list.sublist(from,to).clear()
编辑(重构的问题):
减少ArrayList的内部大小(即让ArrayList之后使用更少的内存)?
我对from = 0的情况特别感兴趣,即从开头清除列表直到某个项目。如果from是列表中的任何索引(不仅是第一个),trimToSize()也可以工作吗?
答案 0 :(得分:4)
“clear”是在底层本机数组(Object [])中重定位对象,但它不会调整数组的大小。如果要在删除ArrayList中的某些项后减小数组大小,请使用trimToSize()方法。
数组的未使用元素引用设置为null,因此可以对元素进行垃圾回收。
答案 1 :(得分:2)
当您清除子列表时,它与删除这些条目相同,因此所有这些条目都可以被GCed(少在其他地方引用它们)
托管内存对象的重点在于您无需担心清理它们的方式和时间。除非你知道你有问题,否则我不担心。在这种情况下,我会使用内存分析器来确定在您认为不应该保留对象的原因时。
答案 2 :(得分:1)
sublist(from,to).clear()是否允许对ArrayList的已清除部分进行垃圾收集?
是的,如果您获得子列表并清除它,您将从原始列表中删除子列表中的所有元素。
换句话说,如果列表是唯一存储对象引用的列表,您删除的对象有资格进行垃圾回收。
基本演示:
List<String> strings = new ArrayList<String>();
strings.add("one");
strings.add("two");
strings.add("three");
strings.add("four");
System.out.println(strings); // prints [one, two, three, four]
strings.subList(1, 3).clear();
System.out.println(strings); // prints [one, four]
答案 3 :(得分:0)
未使用?返回的列表是原始的VIEW。如果您修改一个,则可能会在另一个上看到更改。