Java 如何为对象数组实现移除方法
我知道我的添加方法是正确的:Java 如何为对象数组实现移除方法,java,arrays,list,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
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]
我尝试了两种不同的删除方法,它们都是相同的(一种是我创建的,另一种是我几天前在堆栈上发现的最相似的问题)
第一次删除:
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;
}
公共布尔删除(对象){
对于(int i=0;i您必须在数组中找到对象,然后将最后一个对象移动到该索引(如果它不是最后一个)并减小大小
if (obj == null) return;
for (int i = 0; i < size; i++) {
if (obj.equals(set[i])) {
set[i] = set[--size];
break;
}
}
if(obj==null)返回;
对于(int i=0;i
您的remove方法除了检查列表中是否存在对象之外,什么也不做
将对象设置为null不会将其从列表中删除。要从列表中删除该对象,必须执行以下操作:
查找对象在数组中的位置
从阵列中删除找到的位置
要删除该位置,您可以将索引后的所有值向左移动(就像第二个算法尝试做的那样)。或者您可以创建一个新数组,并将内容从旧数组复制到新数组(跳过找到的索引)。很抱歉,但是(未编辑的版本,谢谢@TheStijn)你的代码看起来很糟糕。而且无论如何都不应该编译(object
)。不知怎的,我想起了……为什么你在实现一个集合时把它称为列表?嗯,我看到的只是格式更正。正确的格式是给程序员的。现在是凌晨5点,我“开始”我的一天过了两个小时。我很抱歉。虽然我笑了笑漫画,但我还是很生气(哈!)。我不是故意要增加混乱。这是一套ADT实现,但我们正在研究列表。现在确实是睡觉的时候了。