如果列表在其生命周期内保持为空,这是否会提高性能?
public class LazyArrayList<E> implements List<E> {
private List<E> list = Collections.emptyList();
public add(E e) {
if (list == Collections.EMPTY_LIST) {
list = new ArrayList();
}
list.add(e);
}
// other necessary methods
}
例如:
List<Integer> deleteList = new LazyArrayList<Integer>();
for ( MyObj o : otherList ) {
if (o.isOutdated()) {
deleteList.add(o.getId());
}
}
return deleteList;
答案 0 :(得分:1)
没有。 ArrayList已经具有此优化(在最新版本的JRE中)。它仅在需要时实例化其内部数组:
/**
* Shared empty array instance used for empty instances.
*/
private static final Object[] EMPTY_ELEMENTDATA = {};
public ArrayList() {
super();
this.elementData = EMPTY_ELEMENTDATA;
}
答案 1 :(得分:0)
尝试使用ArrayList.trimToSize()说:
将此ArrayList实例的容量调整为列表的当前大小。应用程序可以使用此操作来最小化ArrayList实例的存储。
请查看ArrayList.ensureCapacity()说:
如果需要,增加此ArrayList实例的容量,以确保它至少可以容纳由minimum capacity参数指定的元素数。