1

이 질문에는 이미 답변이 있습니다.

개체의 속성 중 하나를 기반으로 개체의 배열 목록을 정렬하려면 여기 내 코드 '이름'에서 말할 수있는 검색 및이 옵션에 대한 'Comparator'사용에 대한 발견, 아래 클래스는 내 개체입니다 :

public class PhoneBook{

long number;
String name;
String family;
String address;

public long getNumber() {
    return number;
}

public void setNumber(long number) {
    this.number = number;
}

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

public String getFamily() {
    return family;
}

public void setFamily(String family) {
    this.family = family;
}

public String getAddress() {
    return address;
}

public void setAddress(String address) {
    this.address = address;
}

}

그리고 내 sort 메소드에서 'compare'메소드를 오버라이드한다.

public void sort()
{
    Collections.sort(phoneBooks, new Comparator<PhoneBook>() {
        @Override
        public int compare(PhoneBook o1, PhoneBook o2) {
            return o1.getName().compareToIgnoreCase(o2.getName());
        }
    });
}

하지만 내 문제는 왜 이런 식으로 첫 번째 코드에서 'Comparable'을 구현하지 않고 혼란스러워하는 것입니다 :

public class PhoneBook implements Comparable<PhoneBook>

정렬 방법이 잘 작동하고 실제로 위의 코드를 시도하고 오류가 발생하여 구현 부분이 제거되었지만 작동하는 것으로 나타났습니다.


3 답변


2

비교 가능 :

  1. Comparable은 단일 정렬 순서를 제공합니다. 즉, 우리는 ID 또는 이름 또는 가격 등과 같은 단일 요소를 기반으로 컬렉션을 정렬 할 수 있습니다.
  2. Comparable은 원래 클래스에 영향을 미치고 실제 클래스는 수정됩니다.
  3. Comparable은 compareTo () 메서드를 사용하여 요소를 정렬합니다.
  4. Comparable 타입의리스트 요소를 Collections.sort (List) 메서드입니다.

비교기 :

  1. Comparator는 여러 정렬 순서를 제공합니다. 즉, 우리는 다음과 같은 여러 요소를 기반으로 컬렉션을 정렬 할 수 있습니다. 이드, 이름 및 가격 등

  2. Comparator는 원래 클래스, 즉 실제 클래스에 영향을주지 않습니다. 수정되지 않았습니다.

  3. Comparator는 compare () 메서드를 사용하여 요소를 정렬합니다.

  4. Comparator 타입의리스트 요소를 Collections.sort (List, Comparator) 메서드입니다.


2

여기에 원하는 것을 할 수있는 두 가지 방법이 있습니다. 하나는 사용자 정의를 사용하는 것입니다.Comperator(위에서 한 것처럼), 두 번째는Comperable인터페이스. 둘 다 할 필요는 없습니다.

첫 번째 방법 (비교기) - 비교자를 사용하여 sort 메소드를 실행하면 정렬 메소드가 오브젝트를 비교하기 위해이를 사용합니다. 비교자를 사용하기 때문에 구현할 필요가 없습니다.compareToComparable

두 번째 방법 (comperable) - 당신은 comperator없이 sort 메소드를 실행한다. 여기서 일어나는 일은 sort 메소드가compareTo방법Comperable개체에 구현 한 인터페이스

어느 쪽이든 작동하지만 두 가지 모두 필요하지는 않습니다.


2

두 가지가있다Collections.sort()행동 양식.

처음에는Collection정렬 및 사용compareTo방법. 이 경우 클래스가 구현해야합니다.Comparable.

다른 하나는너는 사용했다.두 개의 인수를받습니다.Collection두 번째는Comparator. 이 클래스는 클래스를 구현하는지 상관하지 않습니다.Comparable<? super YourClass>제공된대로 사용함Comparator.

함수 인터페이스를 구현할 때 Lambda가 유용합니다.

Collections.sort(phoneBooks, (o1,  o2)-> o1.getName().compareToIgnoreCase(o2.getName()));


  • 고맙습니다. 위에서 언급 한 Lambda를 사용하려고했지만 Lambda가 어떻게 작동하는지 모릅니다. Lambda에 대해 작성한 행을 시도했지만 사용 방법 및 사용 방법에 대해 혼란 스럽습니다. 작동하지 않기 때문에 어디에서? - Bita Karimi
  • @BitaMirshafiee 닫기 paranthesis를 추가했습니다. - Yoda

연결된 질문


관련된 질문

최근 질문