【问题标题】:How to implement a remove method for an object array如何实现对象数组的删除方法
【发布时间】:2012-10-19 09:35:27
【问题描述】:

我知道我的 add 方法是正确的:

public void add(Object object) {
    if (!contains(object) && size !=maxObjects) {
        set[size] = object; size++;
    }
    else 
        System.out.println("Already exists.");
}

因为我得到如下打印输出:

Set [maxObjects=8, set=[a, 7, null, null, null, null, null, null], count=2]  
true  (I ask if it contains a value)  
false  "                            "  
Set [maxObjects=8, set=[a, 7, b, Valencia, 24, s, Victoria, null], count=7]  
Set [maxObjects=8, set=[a, 7, b, Valencia, 24, s, Victoria, 4234], count=8]  

我尝试了两种相同的删除方法(一种是我创建的;另一种是我几天前在 Stack 上发现的最相似的问题。)

第一次删除:

public boolean remove(Object object) {
    if (contains(object)) {
        object = null; 
        return true;
    }
    System.out.println("The object doesn't exist to delete.");
    return false;
}

另一个删除:

public boolean remove(object object) {
    for (int i=0; i<(size-1); i++) {
        while (!contains(object) && size <= maxObjects) {
            set[i] = set[i+1]; size--; return true;
        }
    }
    System.out.println("Doesn't exist.");
    return false;
}

任何帮助都会很棒!

【问题讨论】:

  • 很抱歉,但是(感谢@TheStijn 的未编辑版本)您的代码看起来很糟糕。并且无论如何都不应该编译(object)。不知怎的,我想起了this comic...
  • 在实现集合时为什么要称其为列表?
  • 嗯,我看到的只是格式更正。正确的格式是给程序员的。现在是凌晨 5 点,我将在两个小时后“开始”我的一天。我很抱歉。虽然我笑了漫画,但我还是被冒犯了(哈!)。
  • 我不是有意添加混淆。这是来自 Set ADT 实现,但我们正在研究列表。确实该睡觉了。

标签: java arrays list


【解决方案1】:

您必须在数组中找到对象,然后将最后一个对象移动到该索引(如果它还不是最后一个)并减小大小。

if (obj == null) return;

for (int i = 0; i < size; i++) {
    if (obj.equals(set[i])) {
        set[i] = set[--size];
        break;
    }
}

【讨论】:

    【解决方案2】:

    您的 remove 方法只是检查列表中是否存在该对象。

    将对象设置为 null 不会将其从列表中删除。要从列表中删除对象,您必须执行以下操作:

    1. 查找对象在数组中的位置
    2. 从数组中删除找到的位置。

    要删除位置,您可以将索引后的所有值向左移动(就像第二种算法尝试做的那样)。或者您可以创建一个新数组并将内容从旧数组复制到新数组(跳过找到的索引)。

    【讨论】:

      猜你喜欢
      • 2020-10-06
      • 2012-04-08
      • 2021-02-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-16
      • 2022-01-06
      相关资源
      最近更新 更多