【问题标题】:Remove items from custom arraylist implemetation without .remove从没有 .remove 的自定义 arraylist 实现中删除项目
【发布时间】:2021-01-21 06:59:21
【问题描述】:

我正在开发一个自定义的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 变量,但它似乎没有多大作用。

如何让它工作?谢谢。

【问题讨论】:

  • 您为什么不想首先使用这些方法?它们旨在帮助您管理列表。

标签: java arrays arraylist data-structures


【解决方案1】:
  1. 创建一个数组来保存 [过滤] 结果。它的初始大小为零。
  2. 遍历contents
  3. 如果contents的当前元素需要保留,那么
    • 创建一个长度比保存结果的数组大一的临时数组。
    • 将结果数组复制到临时数组中
    • 将临时数组的最后一个元素设置为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));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-29
    • 1970-01-01
    相关资源
    最近更新 更多