删除Arraylist中与Remove方法中对象对应的所有项目

时间:2016-06-08 00:56:32

标签: android arraylist

我目前遇到的问题是它没有删除我在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方法中的对象相对应的所有项?

3 个答案:

答案 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)

这很糟糕,或者您发布的信息不完整。 要从列表中删除项目,您需要以下两个选项之一:

  1. 向remove函数传递对要删除的对象的引用(而不是新对象)。
  2. 在列表的Person类中使用equals函数来查找应删除的元素。

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