如何实现对象数组的remove方法

时间:2012-10-19 09:35:27

标签: java arrays list

我知道我的添加方法是正确的:

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;
}

任何帮助都会很棒!

2 个答案:

答案 0 :(得分:1)

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

if (obj == null) return;

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

答案 1 :(得分:0)

你的删除方法除了检查列表中是否存在对象外什么也没做。

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

  1. 在数组中找到对象的位置
  2. 从阵列中删除找到的位置。
  3. 要删除位置,您可以将索引后的所有值都移到左侧(就像第二个算法尝试的那样)。或者您可以创建一个新数组并将内容从旧数据复制到新数组(跳过找到的索引)。