【发布时间】:2020-03-06 22:27:58
【问题描述】:
我想制作自己的 ArrayList 表示。
在我的班级MyList<T> 我正在创建T[] array= (T[]) new Object[size];
在尝试删除元素时,我必须创建另一个数组来比较元素,
所以我发了T[] tmpArr=(T[])array;
我想重写除一个之外的所有元素,我想删除它但我有错误
当我尝试array[i]=tmpArr[i+1] 或array= tmpArray 时,任何转换都不起作用,我该怎么做?
错误在 else if 和 else 中
public void remove() {
T[] tmpArray= (T[]) new Object[realSize];
for(int i=0;i<size;++i){
tmpArray[i]=(T)array[i];
}
for(int i=0;i<size;++i) {
if (i == current - 1) {
} else if (i > current - 1) {
array[i] =tmpArray[i + 1];
} else {
array[i] = (T) tmpArray[i];
}
}
}
【问题讨论】:
-
这个问题需要更多细节。请考虑创建minimal reproducible example。如果有任何帮助,您可以查看standard library's ArrayList source,看看它是如何处理删除的。
-
基本上我正在创建两个数组 T[] arr=(T[]) new Object[size],我不能做类似 arr[i]=tmpArr[i+1] 或 arr=tmpArr
-
尽量避免在 cmets 中添加细节和解释。对于那些想要回答你的问题的人来说,这会让事情变得更难。相反,请编辑您的问题并根据需要添加代码/详细信息/解释。
-
“我必须创建另一个数组来比较元素,所以我创建了
T[] tmpArr=(T[])array;”,它不会创建另一个数组(作为一个单独的对象占用不同的内存位置),而只是另一个 变量 将持有与array相同的引用。此外,您的示例应该可以正常编译,除非您在通用方法中执行它们,该方法定义了自己的 separate类型,该类型与在 MyList<T>指定的<T>无关。 -
无论如何要得到正确的答案,我们需要看到正确的minimal reproducible example(我们可以将代码复制粘贴到我们的计算机中并且无需任何修改重现您遇到的问题)。