微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

从自定义数组列表实现中删除项目,无需 .remove

如何解决从自定义数组列表实现中删除项目,无需 .remove

我正在处理自定义 ArrayList 实现,并且有一种方法,我尝试从数组(例如 E[] 元素)中根据条件删除一个项目。通过执行以下操作来初始化数组:

String[] contents = {"chicken","hippo","goat"};
ArrayI<String> newarray = new ArrayI(contents);
newarray.chooser(new LongChooser());

它应该删除长度为 4 或更少的单词并返回一个这样的数组:

["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 变量,但它似乎没什么用。

我如何让它发挥作用?谢谢。

解决方法

  1. 创建一个数组来保存 [过滤后的] 结果。它的初始大小为零。
  2. 遍历 contents
  3. 如果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 举报,一经查实,本站将立刻删除。