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

问题描述:

绝望,找出我怎样才能使我的功能更有效。这是我现在有如何使此功能更有效? - Java的

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函数。任何提示或指针,非常感谢。谢谢

+5

HTTP的呼叫覆盖:// codereview.stackexchange.com/ – Reimeus 2014-10-19 23:14:45

+0

你有什么证据证明这段代码效率低下? – 2014-10-19 23:21:53

+0

教授的效率提交服务器说它效率不高。 – johnnyboyyy 2014-10-19 23:26:45

addAll方法是无效的:有机会,它会多次调整底层集合完成之前。

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

的一个方法是添加改变大小的方法,它采用新的大小:

protected void resizeTo(int newSize) 

resize()方法然后将通过resizeTo

protected void resize() { 
    resizeTo(Math.max(2 * n,1)); 
} 
+0

我调整大小功能已经由调整大小的阵列(Math.max(2 * N,1))虽然。除非我监督的东西 – johnnyboyyy 2014-10-19 23:37:29

+0

@johnnyboyyy我的意思是,'addAll'方法应该()'与循环继续之前被调整为'N + c.size。 – dasblinkenlight 2014-10-19 23:47:42