如何解决从自定义数组列表实现中删除项目,无需 .remove
我正在处理自定义 ArrayList
实现,并且有一种方法,我尝试从数组(例如 E[]
元素)中根据条件删除一个项目。通过执行以下操作来初始化数组:
String[] contents = {"chicken","hippo","goat"};
ArrayI<String> newarray = new ArrayI(contents);
newarray.chooser(new LongChooser());
["chicken","hippo"]
我正在尝试不使用任何内置方法,例如 remove()
、clone()
、arraycopy()
等。我似乎无法理解这可以工作,我尝试创建一个重复的数组并尝试像这样复制元素:
E[] copy = (E[]) (new Object[this.size-1]);
for (int i = 0; i < size; i++) {
if (shorter) {
copy[i] = elements[i];
}
else {
for (int j = i; j<this.size-1; j++) {
elements[j] = elements[j+1];
}
elements[size-1] = null;
size -= 1;
}
for (int i =0; i< copy.length; i++) {
elements[i] = copy[i];
}
size -= 1;
我知道这不是正确的方法,因为它们不是相同大小的数组,只是返回 [longword,longerword,null]
。此外,我很确定我应该使用 size
变量,但它似乎没什么用。
我如何让它发挥作用?谢谢。
解决方法
- 创建一个数组来保存 [过滤后的] 结果。它的初始大小为零。
- 遍历
contents
。 - 如果
contents
的当前元素需要保留,则- 创建一个临时数组,其长度比保存结果的数组大 1。
- 将结果数组复制到临时数组
- 将临时数组的最后一个元素设置为
contents
的当前元素 - 将临时数组分配给结果数组
这是代码,只使用了简单的数组。我想你可以根据自己的需要调整它。请注意,最后一行只是为了检查 newContents
的值。这不是必需的。
String[] contents = {"chicken","hippo","goat"};
String[] newContents = new String[0];
for (String str : contents) {
if (str.length() > 4) {
String[] temp = new String[newContents.length + 1];
for (int i = 0; i < newContents.length; i++) {
temp[i] = newContents[i];
}
temp[newContents.length] = str;
newContents = temp;
}
}
System.out.println(Arrays.toString(newContents));
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。