2015-10-16 52 views
1

我有一個項目,我已被分配在Java中,我必須基本上創建我自己的類模仿ArrayList類的基本功能。使用數組實現我自己的ArrayList

我必須用下面顯示的格式使用這些變量來做,但我被困在一個部分。當數組填滿時,我想用10個額外空格創建一個新數組,然後將所有舊數組元素複製到新數組元素中,並從現在開始使用它。如何讓我的程序從現在開始自動使用這個數組?因爲它會繼續使用第一個數組。

public MyArrayList() 
{ 
    array = new String[10]; 
    arraySize = 10; 
    arrayElements = 0; 
} 

public void add (String string) 
{ 
    if (arrayElements < arraySize) 
    { 
     array[arrayElements] = string; 
     arrayElements++; 
    } else 
    { 
     arraySize += 10; 
     arrayElements++; 
     String[] array2 = new String[arraySize]; 

     for (int i = 0; i < arrElements;i++) 
     { 
      array2[i] = array[i]; 
     } 
     //missing code here I think? 
     array2[arrayElements] = string; 
    } 
} 
+2

我覺得'arrayElements ++;'應該在將#arrayElements複製到一個新數組後纔會出現。 – zapl

回答

1

MyArrayList使用array來保存其內容;在add中,您已在array2中創建了此新版本;只需將其分配給array

+0

我不能將array2分配給數組,但因爲它的大小增加了一倍? :( – toastedDeli

+0

你試過了嗎?我的意思是'array = array2',而不是試圖複製單個元素。 –

+0

沒關係我知道了:-)非常感謝你的幫助! – toastedDeli

0

這可以是增加陣列

String[] array2 = new String[array.length + 10]; 
System.arraycopy(array , 0, array2 , 0, array.length); 
array = array2 ; 
+0

也許你可以添加幾個詞來使這個更好的答案,也許設置arraySize array.length + 10,也許使用newArray而不是array2 ... –

4

分配array2的尺寸與array參考的溶液。喜歡的東西,

//missing code here I think? 
array2[arrayElements] = string; 
array = array2; 

或者,使用Arrays.copyOf(int[], int)和類似

arraySize += 10; 
arrayElements++; 
array = Arrays.copyOf(array, arraySize); // <-- will pad with zeros. 
+0

我很困惑,我怎麼能分配數組的值array2? array2的大小會增加一倍嗎?我希望代碼能夠繼續,所以我可以繼續添加項目,並且它會不斷更新數組的大小。我的問題是,當它到達第11個元素時,它會嘗試將元素添加到數組,而不是array2。我需要將array2作爲對象的主要數組。 – toastedDeli

+0

你會將參考分配回'array'。它將是'array2'引用的相同數組(doubled數組)。 –

+1

@toastedDeli「array」字段是數組的引用*,而不是數組本身。 'array2'是對另一個數組的引用。 'array = array2'更新'array'中存儲的引用來引用另一個數組。然後第一個數組未被引用,並且將被JVM刪除/垃圾收集。 – Andreas

0

您有多個問題:

  • 您創建一個新的臨時數組(array2)和複製現有的值,但您不會更新array字段以指向新陣列。
  • 你太早增加arrayElements

你的代碼應該是(僞代碼):

add(newVal) { 
    if (array is full) { 
     newarray = new [array.size + extra] 
     copy values from array to newarray 
     array = newarray 
    } 
    add newVal to array and increment value count 
} 

見。你應該只在一個地方添加新的價值。
這就是DRY原則(Don't Repeat Yourself)。