Java 使用数组实现我自己的ArrayList

Java 使用数组实现我自己的ArrayList,java,arrays,arraylist,Java,Arrays,Arraylist,我有一个用java分配的项目,我必须基本上创建自己的类,模仿ArrayList类的基本特性 我必须使用这些变量以如下所示的格式进行操作,但我只限于一个部分。当数组填满时,我想用10个额外的空格创建一个新数组,然后将所有旧数组元素复制到新数组中,并从现在开始使用它。如何使我的程序从现在起自动使用此阵列?因为它将继续使用第一个数组 public MyArrayList() { array = new String[10]; arraySize = 10; arrayEleme

我有一个用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;
    }
}
publicMyArrayList()
{
数组=新字符串[10];
arraySize=10;
阵列元素=0;
}
公共空添加(字符串)
{
if(数组元素<数组化)
{
数组[arrayElements]=字符串;
arrayElements++;
}否则
{
阵列化+=10;
arrayElements++;
String[]array2=新字符串[arraySize];
for(int i=0;i
MyArrayList
使用
array
保存其内容;在
add
中,您已经在
array2
中创建了此文件的新版本;只需将其分配给
数组

MyArrayList
使用
数组
保存其内容;在
add
中,您已经在
array2
中创建了此文件的新版本;只需将其分配给
阵列

这可以作为增加阵列大小的解决方案

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

这是一种增加阵列大小的解决方案

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

array2
分配给
array
引用。大概

//missing code here I think?
array2[arrayElements] = string;
array = array2;
或者,使用

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

array=Arrays.copyOf(array,arraySize);// 将
array2
分配给
array
引用。大概

//missing code here I think?
array2[arrayElements] = string;
array = array2;
或者,使用

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

array=Arrays.copyOf(array,arraySize);// 您有多个问题:

  • 创建一个新的临时数组(
    array2
    )并复制现有值,但不更新
    array
    字段以指向新数组
  • 您过早地增加了
    arrayElements
您的代码应该是(伪代码):

看。您只能在一个位置添加新值。

这就是干燥原理()。

您有多个问题:

  • 创建一个新的临时数组(
    array2
    )并复制现有值,但不更新
    array
    字段以指向新数组
  • 您过早地增加了
    arrayElements
您的代码应该是(伪代码):

看。您只能在一个位置添加新值。

这就是干式原理()。

我认为
arrayElements++应该在你把数组元素复制到一个新数组之后出现应该在您将#arrayElements复制到新数组之后出现。我很困惑,如何将array2的值赋值给数组?array2的大小是原来的两倍?我希望代码能够继续,这样我就可以继续添加项,并且它将继续更新数组的大小。我的问题是,当它到达第11个元素时,它仍会尝试将该元素添加到array中,而不是array2。我需要使array2基本上成为对象的主数组。您需要将引用分配回
数组
。它将是
array2
引用的同一数组(双数组)。@toastedeli
array
字段是对数组的引用,而不是数组本身
array2
是对另一个数组的引用
array=array2
更新存储在
array
中的引用以引用其他数组。第一个数组随后被取消引用,JVM将删除/垃圾收集。我更新了我的代码,将array=array2包括在我说的缺少代码的地方,但我仍然得到一个异常?我想我理解你关于参考变更的意思,但我无法让它发挥作用:(我很困惑,我该如何为数组分配array2的值?array2的大小将是array2的两倍?我希望代码能够继续,这样我可以继续添加项目,它将不断更新数组的大小。我的问题是,当它到达第11个元素时,它仍会尝试将元素添加到数组中,而不是array2。我需要使array2为t。)对象的主数组本质上是。您可以将引用分配回
array
。它将是
array2
引用的相同数组(双数组).@toastedeli
array
字段是对数组的引用,而不是数组本身。
array2
是对另一个数组的引用。
array=array2
更新存储在
array
中的引用以引用另一个数组。然后,第一个数组将被取消引用,并将被JVM删除/垃圾收集。I upd将我的代码包含在array=array2中,我说过应该包含缺少的代码,但我仍然得到一个例外?我想我理解你关于引用更改的意思,但我无法使其工作:(我无法将array2分配给array,因为它的大小是array的两倍?:(你试过了吗?我的意思是只想
array=array2
,不想复制单个元素。没关系,我得到了:-)非常感谢你的帮助!我无法将array2分配给数组,因为它的大小是原来的两倍:(你试过了吗?我的意思是只想
array=array2
,不想复制单个元素。没关系,我得到了:-)非常感谢您的帮助!也许您可以添加一些单词使其成为更好的答案,也许可以将arraySize设置为array.length+10,也许可以使用newArray而不是array2…也许您可以添加一些单词使其成为更好的答案,也许可以将arraySize设置为array.length+10,也许可以使用newArray而不是array2。。。