使用数组实现我自己的ArrayList

时间:2015-10-16 23:02:55

标签: java arrays arraylist

我有一个项目,我已经在java中分配,我必须基本上创建自己的类,模仿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;
    }
}

4 个答案:

答案 0 :(得分: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.

答案 1 :(得分:1)

MyArrayList使用array来保存其内容;在add中,您已在array2中创建了此版本的新版本;只需将其分配给array

答案 2 :(得分:0)

这可以是增加数组大小的解决方案

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

答案 3 :(得分: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)。