如何使此功能更有效? - Java

时间:2014-10-19 23:14:02

标签: java arrays performance

急切地想知道如何让我的功能更有效率。这就是我现在所拥有的

public boolean addAll(int i, Collection<? extends T> c) {
    for (T x : c)
        add(i++, x);
    return true;
}

public void add(int i, T x) {
    if (n + 1 > a.length) resize();
    System.arraycopy(a, i, a, i+1, n-i);
    a[i] = x;
    n++;
}

protected void resize() {
    T[] b = f.newArray(Math.max(2 * n,1));
    System.arraycopy(a, 0, b, 0, n);
    a = b;
}

我不确定我还能做些什么来实现更有效的方式来使用我的addAll函数。非常感谢任何提示或指示。谢谢

1 个答案:

答案 0 :(得分:1)

您的addAll方法效率低下:可能会在完成之前多次调整基础集合的大小。

您可以通过在addAll中添加集合的大小,调整大小以适应其所有元素,然后继续复制来消除不必要的大小调整。

实现此目的的一种方法是添加一个采用新大小的调整大小方法:

protected void resizeTo(int newSize)

resize()

的调用将覆盖您的resizeTo方法
protected void resize() {
    resizeTo(Math.max(2 * n,1));
}