2014-10-19 63 views
-1

絕望,找出我怎樣才能使我的功能更有效。這是我現在有如何使此功能更有效? - 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

回答

1

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