我正在重新创建ArrayList类。我对gradient()
方法有疑问。我希望我的add
方法返回新表并将其影响到我的元素。但是当我想进入table元素时,它总是add
。
另一个问题..我想创建将对象作为Arraylist元素的构造函数,例如null
。.承包商ArrayListBis(1,2,3)
的参数是什么?
ArrayListBis(Object... args)
答案 0 :(得分:1)
您的添加方法有几个问题。首先,您不需要每次添加新元素时都重新创建列表。原因是您的列表不会以完整的开头,因此此行
add(o,size());
仅应在this.size == elements.length
的条件下进行。但是,我相信您应该使用size
或某个变量来反映到目前为止已向数组列表中插入了多少个元素的实际计数。因此,在您的构造函数中,我将设置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;
}
}
我仅更改的另一件事是新列表的大小应为多少。我将其更改为原始数组大小的两倍,因为您不想创建一个比原始数组大一个大小的新数组,因为制作新数组并将所有元素从旧数组复制到新数组是一项不应该经常进行的昂贵的操作。