2015-02-08 57 views
-1

ensureCapacitymethod在列表中創建更多空間,以便可以將更多元素添加到列表中。該方法的問題是它可能在列表中創建一個空白。我怎樣才能解決這個問題?如何解決列表中的空白?

public class UnboundedList<K extends Comparable<K>,V> extends SimpleBoundedList<K,V> { 

    public UnboundedList(int bound) { 
     super(bound); 
    } 

    @Override 
    public boolean add(K key, V value) { 
     ensureCapacity(); 
     super.add(key, value); 

     return true; 
    } 

    private void ensureCapacity() { 
     if (this.size() == this.values.length) { 
      Object[] newArray = new Object[values.length * 2]; 

     for (int i = 0; i < values.length; ++i) { 
      newArray[i] = values[i]; 
     } 

     this.values = newArray; 
    } 

} 

} 
+0

你有什麼實際問題?你需要「修復」什麼? – 2015-02-08 23:58:48

+0

ensureCapacity方法已損壞。它可能會在列表中產生差距。我需要解決這個問題。我不知道我該怎麼做。 – Kay 2015-02-09 00:11:13

回答

0

你必須確保你的列表的大小就能彌補已被添加之前,他們的附加價值

public final void onEnsureCapacity(final Object[] pObjects) { 
    if((this.getSize() + pObjects.length) > this.getValues().length) { 
      /* Resize to accommodate. */ 
    } 
} 

這段代碼的作用是檢查,如果列表加上數組的大小,目前「虛擬」大小添加到列表比目前的規模更大,我們必須選擇一個大小的數組這將適應兩者。

+0

在我的代碼中,我增加了數組的大小,但它爲什麼會產生潛在的差距? – Kay 2015-02-09 00:23:41

+0

我不相信它,除非你在多個線程共享對象,並且正在經歷一個競爭條件... 經過仔細檢查,它似乎並不適合您嘗試添加列表中超出當前大小兩倍的值數量。 – 2015-02-09 00:27:39

+0

除此之外,只有當大小等於您要添加的數據時,纔會添加到列表中(我認爲,從所提供的代碼段很難說)。 – 2015-02-09 00:29:12