다른 목록의 목록 기반에서 개체 제거

user3871678

list2 내부에있는 목록 기반에서 요소 개체 목록을 제거하고 싶습니다. 나는 removeAll ()을 사용했다. 목록이 list2에있는 요소를 제거하지 않는 이유는 무엇입니까?

Element.java

public class Element {

    private String element;

    public Element() {

    }

    public Element(String element) {
        setE(element);
    }


    public String getElement() {
        return element; 
    }

    public void setElement(String element) {
        this.element = element;
    }
}

RemoveAllTest.java

import java.util.ArrayList;
import java.util.List;
public class RemoveAllTest {
    public RemoveAllTest() {
        List<Element> list = new ArrayList<Element>();
        List<Element> list2 = new ArrayList<Element>();

        list.add(new Element("a"));
        list.add(new Element("b"));
        list.add(new Element("c"));

        list2.add(new Element("a"));
        list2.add(new Element("b"));
        list.removeAll(list2);

        for(int i = 0; i < list.size(); i++) {
            System.out.println(list.get(i).getElement());
        }
    }
    public static void main(String[] args) {
        new RemoveAllTest();
    }
}
닉 팔머

Element 클래스는 equals를 구현하지 않습니다. 왜냐하면 그들은 정확히 동일한 객체인지 테스트하는 Object.equals () 메서드를 사용하기 때문입니다. (즉 ==입니다).

equals를 구현하는 경우 동일한 객체가 Map과 같은 해시 데이터 구조의 동일한 버킷으로 해시되도록 hashCode도 구현하는 것이 좋습니다.

이 문제가없는 요소는 다음과 같습니다.

public class Element {

    private String element;

    public Element() {

    }

    public Element(String element) {
        setE(element);
    }


    public String getElement() {
        return element; 
    }

    public void setElement(String element) {
        this.element = element;
    }

    public boolean equals(Object other) {
        if (other instanceof Element) {
            Element otherElement = (Element) other;
            if (null == element) {
                return otherElement.element == null;
            }
            return element.equals(otherElement.element);
        }
        return false;
    }

    public int hashCode() {
        if (null == element) {
            return -7;
        }
        return element.hashCode();
    }
}

요소에 정상적인 값이 있는지 확인하지 않기 때문에 요소가 null 인 경우주의해야합니다. "더 나은"요소 클래스는 적절한 경우 String을 취하는 생성자를 제공하고 생성자에 전달 된 문자열이 null 인 경우 또는 setElement 호출이 null 값을 취하는 경우 IllegalArgumentException을 발생시킴으로써이를 피할 수 있습니다. 이렇게 :

public class Element {

    private String element;

    public Element(String element) {
        setElement(element);
    }

    public String getElement() {
        return element; 
    }

    public void setElement(String element) {
        if (null == element) {
            throw new IllegalArgumentException("Element must not be null.");
        }
        this.element = element;
    }

    public boolean equals(Object other) {
        if (other instanceof Element) {
            Element otherElement = (Element) other;
            return element.equals(otherElement.element);
        }
        return false;
    }

    public int hashCode() {
        return element.hashCode();
    }
}

마지막으로, 등호를 쉽게 잊고 요소에 null을 할당 할 수 있으므로 null == 요소가 element == null보다 작성하는 것이 좋습니다. null = 요소를 작성하면 컴파일러는 삭제 된 문자에 대해 불평하고 경고합니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

다른 개체 목록에서 중복 목록 개체 값을 제거

분류에서Dev

Python 3.x의 다른 목록에서 개별 항목 목록 제거

분류에서Dev

다른 목록에있는 객체의 필드 값을 기반으로 목록에서 요소 제거-JAVA

분류에서Dev

R의 다른 목록에없는 목록에서 개체를 제거하는 방법

분류에서Dev

파이썬의 다른 목록에서 전체 목록 삭제

분류에서Dev

다른 목록을 기반으로 목록 열에서 목록 값 제거

분류에서Dev

다른 목록의 항목을 비교하여 목록에서 항목 제거

분류에서Dev

java8 제거는 객체 기반 조건의 목록에서 개체를

분류에서Dev

목록에있는 다른 숫자의 x 개 내에없는 요소 / 숫자를 목록에서 제거

분류에서Dev

조건 자 논리를 사용하여 목록의 개체가 C #의 다른 목록에 포함 된 요소를 기반으로 제네릭 목록에서 요소를 제거하려면 어떻게해야합니까?

분류에서Dev

목록 C ++에서 개체 제거

분류에서Dev

목록에서 개체 제거

분류에서Dev

Dart 목록에서 개체 제거

분류에서Dev

다른 목록에있는 객체의 필드 값을 기반으로 목록에서 요소를 제거하는 방법

분류에서Dev

Bash의 다른 파일에서 항목 목록 제거

분류에서Dev

해당 목록의 foreach 루프에있는 목록에서 개체 제거

분류에서Dev

다른 인덱스 목록을 기반으로 목록의 일부 제거

분류에서Dev

Django의 목록에서 개체 제외

분류에서Dev

다른 파일의 Python 목록에있는 문자열 인 경우 개체 제거

분류에서Dev

다른 목록의 목록에서 문자열 개체를 찾습니다.

분류에서Dev

3 개의 다른 목록을 기반으로 한 새 목록

분류에서Dev

다른 개체와 중복되는 목록 개체에서 제거 (동일한 변수가 있음)

분류에서Dev

VB.Net의 목록에서 중복 개체 제거

분류에서Dev

Linq-하나의 익명 목록을 다른 목록에서 제거

분류에서Dev

속성을 기반으로 한 목록에서 다른 목록으로 목록 개체 복사

분류에서Dev

다른 2 개의 목록에서 Excel에서 1 개의 목록 만들기

분류에서Dev

람바 식의 다른 개체 목록 내에서 개체 목록 가져 오기

분류에서Dev

다형성 및 C ++에서 다른 개체 목록 정의

분류에서Dev

개체가 배열 목록에서 제대로 제거되지 않습니다.

Related 관련 기사

  1. 1

    다른 개체 목록에서 중복 목록 개체 값을 제거

  2. 2

    Python 3.x의 다른 목록에서 개별 항목 목록 제거

  3. 3

    다른 목록에있는 객체의 필드 값을 기반으로 목록에서 요소 제거-JAVA

  4. 4

    R의 다른 목록에없는 목록에서 개체를 제거하는 방법

  5. 5

    파이썬의 다른 목록에서 전체 목록 삭제

  6. 6

    다른 목록을 기반으로 목록 열에서 목록 값 제거

  7. 7

    다른 목록의 항목을 비교하여 목록에서 항목 제거

  8. 8

    java8 제거는 객체 기반 조건의 목록에서 개체를

  9. 9

    목록에있는 다른 숫자의 x 개 내에없는 요소 / 숫자를 목록에서 제거

  10. 10

    조건 자 논리를 사용하여 목록의 개체가 C #의 다른 목록에 포함 된 요소를 기반으로 제네릭 목록에서 요소를 제거하려면 어떻게해야합니까?

  11. 11

    목록 C ++에서 개체 제거

  12. 12

    목록에서 개체 제거

  13. 13

    Dart 목록에서 개체 제거

  14. 14

    다른 목록에있는 객체의 필드 값을 기반으로 목록에서 요소를 제거하는 방법

  15. 15

    Bash의 다른 파일에서 항목 목록 제거

  16. 16

    해당 목록의 foreach 루프에있는 목록에서 개체 제거

  17. 17

    다른 인덱스 목록을 기반으로 목록의 일부 제거

  18. 18

    Django의 목록에서 개체 제외

  19. 19

    다른 파일의 Python 목록에있는 문자열 인 경우 개체 제거

  20. 20

    다른 목록의 목록에서 문자열 개체를 찾습니다.

  21. 21

    3 개의 다른 목록을 기반으로 한 새 목록

  22. 22

    다른 개체와 중복되는 목록 개체에서 제거 (동일한 변수가 있음)

  23. 23

    VB.Net의 목록에서 중복 개체 제거

  24. 24

    Linq-하나의 익명 목록을 다른 목록에서 제거

  25. 25

    속성을 기반으로 한 목록에서 다른 목록으로 목록 개체 복사

  26. 26

    다른 2 개의 목록에서 Excel에서 1 개의 목록 만들기

  27. 27

    람바 식의 다른 개체 목록 내에서 개체 목록 가져 오기

  28. 28

    다형성 및 C ++에서 다른 개체 목록 정의

  29. 29

    개체가 배열 목록에서 제대로 제거되지 않습니다.

뜨겁다태그

보관