gpt4 book ai didi

java - 重新创建 Arraylist 类

转载 作者:行者123 更新时间:2023-12-02 10:44:54 25 4
gpt4 key购买 nike

我正在努力重新创建 ArrayList 类。我的 add 方法有问题。我希望我的 add 方法返回新表并将其影响到我的元素。但是,当我想进入表元素的元素时,它始终为 null。还有一个问题..我想创建一个将对象作为 Arraylist 元素的构造函数,例如 ArrayListBis(1,2,3) ..承包商的参数是什么 ArrayListBis(对象... args)

public class ArrayListBis  {

final static int DEFAULTSIZE=50;
private int indexCourant,dernierElement,size;
private Object [] elements;

public ArrayListBis(int size){
elements=creatList(size);
indexCourant=0;
dernierElement=size-1;
this.size=size;
}

public void add(Object o){
add(o,size());
}

public void add(Object o, int index){
Object[] temp;
if(index <0 || index > size())
throw new IndexOutOfBoundsException();
else{
temp=creatList(size()+1);
for(int i=0;i!=size()+1;i++){
if(i<index)
temp[i]=elements[i];
else if(i==index)
temp[i]=elements[index];
else
temp[i]=elements[i+1];
}
this.size++;
elements=temp;
}
}

最佳答案

您的添加方法存在一些问题。首先,您不需要在每次添加新元素时重新创建列表。原因是您的列表不会一开始就满,因此这一行

add(o,size());

仅应在 this.size == elements.length 的条件下执行。但是,我相信您应该使用 size 或某个变量来反射(reflect)到目前为止插入数组列表的元素的实际数量。因此,在您的构造函数中,我会设置 this.size = 0 因为它从零元素开始。现在,在原始 add 方法中,仅当您要添加到已满的数组时才创建一个新数组。正如其他人所说,您一开始就没有添加新元素。因此,经过这些更改,现在应该如下所示,

public void add(Object o, int index){
Object[] temp;
if(index >= 0 && index < elements.length)
temp[index] = o;
size++;
else{
temp=creatList(elements.length * 2);
for(int i=0;i < elements.length;i++){
if(i<index)
temp[i]=elements[i];
else if(i==index)
temp[i]=o;
else
temp[i]=elements[i+1];
}
temp[index] = 0;
size++;
this.elements = temp;
}
}

我唯一改变的另一件事是新列表的大小应该是多少。我将其更改为原始数组大小的两倍,因为您不想创建一个大小仅比原始数组大一个的新数组,因为创建新数组并将所有元素从旧数组复制到新数组是这是一项成本高昂的操作,不应过于频繁地进行。

关于java - 重新创建 Arraylist 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52655669/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com