我目前遇到的问题是它没有删除我在remove
方法中提供的项目。
ArrayList<Person> persons = new ArrayList<>();
persons.add(new Person(1,"john","london"));
persons.add(new Person(1,"john","london"));
persons.add(new Person(1,"john","london"));
persons.add(new Person(1,"john","london"));
persons.add(new Person(2,"blaze","paris"));
persons.add(new Person(2,"blaze","paris"));
persons.remove(new Person(1,"john","london"));
即使我已经删除了一个项目,Arraylist的大小仍然保持不变。
如何删除与放在remove
方法中的对象相对应的所有项?
答案 0 :(得分:1)
List.remove()
方法将扫描列表,试图找到一个等于你传入的对象的对象。当你这样做时:
persons.add(new Person(1,"john","london"));
您在内存中的某个位置添加了一个名为John London的新Person
对象。当你打电话
persons.remove(new Person(1,"john","london"));
您要求Java搜索位于内存中不同位置的名为John London的第二个 Person
对象。 Java无法找到此对象,因此列表的大小保持不变。
要获得结果,以下if
比较将使用从false
继承的默认equals()
方法返回Object
:
Person p1 = new Person(1, "john", "london");
Person p2 = new Person(1, "john", "london");
if (p1.equals(p2)) {
System.out.println("they are equal");
}
你应该做什么:
如果您希望两个具有相同ID和名称的人被视为相同,那么您将不得不重载equals()
类的Person
方法:
class Person {
private String firstName;
private String lastName;
private int id;
@Override
public boolean equals(Object o) {
if ((o == null) || (getClass() != o.getClass())) {
return false;
}
Person other = (Person)o;
boolean result = firstName.equals(other.firstName) &&
lastName.equals(other.lastName) &&
id == other.id;
return result;
}
}
答案 1 :(得分:0)
这很糟糕,或者您发布的信息不完整。 要从列表中删除项目,您需要以下两个选项之一:
答案 2 :(得分:0)
首先,@ Tim Biegeleisen指出你应该覆盖 .image {
background-image: url("background-image.jpg");
background-size: cover;
}
。
然后你可以做一个新的方法来找到符合你条件的人。
Person.equals()
最后你可以打电话:
private List<Person> findPersons(ArrayList<Person> persons, Person personToMatch) {
List<Person> personsFound = new ArrayList<>();
for (Person person : persons) {
if (person.equals(personToMatch) {
personsFound.add(person);
}
}
return personsFound;
}