我正在尝试比较一个项目包含在arrayList中的天气,如果是,则将其删除。我不确定天气我是否必须实施我自己的等于方法,这是我的代码,但它并没有努力删除正确的项目。
public boolean removeItem(Item item) {
for(int i = 0; i < items.size(); i++) {
if (items.get(i).equals(item)) {
items.remove(item);
return true;
}
}
return false;
}
答案 0 :(得分:2)
您可以使用Collection
Iterator
中删除项目
public boolean removeItem(Item item) {
Iterator<Item> it = items.iterator();
while (it.hasNext()) {
Item i = it.next();
if(i.equals(item)) {
it.remove();
// remove next line if you want to remove all occurrences `item`
return true;
}
}
return false;
}
您也可以致电
items.remove(item);
答案 1 :(得分:2)
ArrayList#remove(Object)会做到这一点!但只有在覆盖了equals
的{{1}}方法时才有效。
如果要删除所有元素,则需要循环:
Item
这将返回已删除的项目数量
从此列表中删除指定元素的第一个匹配项(如果存在)。如果列表不包含该元素,则不会更改。更正式地,删除具有最低索引i的元素,使得(o == null?get(i)== null:o.equals(get(i)))(如果存在这样的元素)。如果此列表包含指定的元素,则返回true(或等效地,如果此列表因调用而更改)。
答案 2 :(得分:0)
我认为你想要包含不等于。你甚至不需要循环它。这是该方法的神奇之处。
public boolean removeItem(Item item) {
if (items.contains(item)){
items.remove(item);
}
return false; // I have no idea why you want to return false.
// I'll just leave it there
}
答案 3 :(得分:0)
是的,你必须在你的类中重写equals。比较每个属性,当其中一个属性不等于另一个属性时,则返回false。例如,如果你使用eclipse,你可以让它为你的类创建equals方法。