我有一个项目,我已经在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;
}
}
答案 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)。