2016-06-08 4 views
0

현재 remove 메소드에서 내가 제공하는 항목이 제거되지 않는 문제에 직면하고 있습니다.제거 방법의 객체에 해당하는 Arraylist의 모든 항목을 제거하십시오.

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. 패스 제거 (그리고 새로운 객체) 할 객체에 대한 참조 : 는 하나 2의 옵션을 필요로하는 목록에서 항목을 제거하십시오.
  2. 목록의 Person 클래스에서 equals 함수를 사용하여 제거 할 요소를 찾습니다.
1

List.remove() 방법을 사용하면 전달 된 것과 동일 개체를 찾기 위해 노력하고 목록을 검색합니다 당신이 한 때 :. 당신이 존 런던라는 이름의 새 Person 객체를 추가

persons.add(new Person(1,"john","london")); 

기억에있는 특정 장소. 당신이
persons.remove(new Person(1,"john","london")); 

라고하면 메모리에서 다른 위치에 존 런던라는 Person 객체를 검색 할 자바 물었다. Java가이 오브젝트를 찾을 수 없으므로리스트의 크기가 동일하게 유지됩니다.

는 다음 if 비교 equals() 방법은 Object로부터 상속 된 기본값을 사용하여 false을 반환합니다 걸쳐 밈으로 활용하려면 다음 작업을

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와 이름이 동일하다고 생각되면 Person 클래스의 equals() 메소드를 오버로드해야합니다 :

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; 
    } 
} 
0

@Tim Biegeleisen은 먼저 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; 
} 

당신이 호출 할 수

List<Person> personsToRemove = findPersons(persons, new Person(1,"john","london")); 
persons.removeAll(personsToRemove); 
관련 문제