我知道我的添加方法是正确的:
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;
}
任何帮助都会很棒!
答案 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设置为对象不会将其从列表中删除。要从列表中删除对象,您必须执行以下操作:
要删除位置,您可以将索引后的所有值都移到左侧(就像第二个算法尝试的那样)。或者您可以创建一个新数组并将内容从旧数据复制到新数组(跳过找到的索引)。