3

我知道我的 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;
}

任何帮助都会很棒!

4

2 回答 2

1

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

if (obj == null) return;

for (int i = 0; i < size; i++) {
    if (obj.equals(set[i])) {
        set[i] = set[--size];
        break;
    }
}
于 2012-10-19T09:40:49.797 回答
0

您的 remove 方法除了检查列表中对象的存在之外什么都不做。

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

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

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

于 2012-10-19T09:42:36.563 回答