2015-10-16 24 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)。