java - 为 Android 编程时是否需要指定列表的初始大小?

标签 java android

对于 Android 编程,如果我在一个方法中创建一个 ArrayList 并且知道当我从该方法返回它时该列表有多大,我是否应该在创建它时指定列表的初始大小?

我问是因为通常我们不会费心指定初始大小,但在为移动设备编程时可能会有所不同。

谢谢。

编辑

我说的是我确实知道列表的最终大小的情况(例如,我正在从类型为 B 的对象列表中创建类型为 B 的对象列表A).

编辑2

是否有任何与此相关的性能指标?

最佳答案

是的,如果您知道列表有多大,您绝对应该指定初始大小。它将提高性能。

如果使用默认构造函数,初始大小将为 0。来自 Android documentation :

public ArrayList() Constructs a new ArrayList instance with zero initial capacity.

还有代码:

public ArrayList() {
    array = EmptyArray.OBJECT;
}

因此,稍后当您添加元素时,内部 Object[] 数组 将被调整大小:

@Override public boolean add(E object) {
    Object[] a = array;
    int s = size;
    if (s == a.length) {
        Object[] newArray = new Object[s +
                (s < (MIN_CAPACITY_INCREMENT / 2) ?
                 MIN_CAPACITY_INCREMENT : s >> 1)];
        System.arraycopy(a, 0, newArray, 0, s);
        array = a = newArray;
    }
    a[s] = object;
    size = s + 1;
    modCount++;
    return true;
}

Here是Android的ArrayList的代码。

因此,为了不浪费时间调整大小,最好指定 ArrayList 的初始大小。

关于java - 为 Android 编程时是否需要指定列表的初始大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19937887/

相关文章:

java - 如何在listview android中仅获取更新的复选框状态

android - 如何在原生 Android 应用程序上使用来自 "Font Awesome"的图标和符号

android - 围绕用户旋转的 Google Maps Android V2 填充

android - "Avoid passing null as the view root"带弹出窗口

java - 在关系双方非法使用mappedBy

java - 在同一 block 中调用方法两次。为什么?

c# - 整数解码从 Java 移植到 C#

java - 配置问题: Unable to locate Spring NamespaceHandler for XML schema namespace [http://www. springframework.org/schema/data/mongo]

android - 如何通过命令行对 apk 进行签名

android - 将 zxing 条码扫描器切换到纵向模式