웹사이트 검색

Java 컬렉션 정렬()


오늘은 Java Collections 정렬 방법에 대해 살펴보겠습니다. Java에서 컬렉션으로 작업하는 동안 데이터를 정렬해야 하는 경우가 더 많습니다.

Java 컬렉션 정렬()

Java Collections 클래스는 모든 ArrayList를 정렬하는 매우 편리한 메서드 Collections.sort()를 제공합니다. 오버로드된 두 가지 Collections.sort() 메서드는 다음과 같습니다.

  1. sort(List list): 자연 순서의 오름차순으로 List의 요소를 정렬합니다.
  2. sort(List list, Comparator c): 비교기에 의해 유도된 순서에 따라 목록의 요소를 정렬합니다.

위의 메서드 시그니처는 제네릭을 사용하지만 여기에서는 읽기 쉽게 하기 위해 제네릭을 제거했습니다. 이 두 가지 방법을 언제 어떻게 사용할 수 있는지 하나씩 살펴보겠습니다.

Java 컬렉션 정렬(목록 목록)

StringArrayList를 고려하십시오.

List<String> fruits = new ArrayList<String>();
fruits.add("Apple");
fruits.add("Orange");
fruits.add("Banana");
fruits.add("Grape");

이제 Collections.sort()를 사용하여 정렬합니다.

Collections.sort(fruits);
// Print the sorted list
System.out.println(fruits);

이 프로그램의 출력은 다음과 같습니다.

[Apple, Banana, Grape, Orange]

따라서 Collections.sort()가 문자열 목록을 Lexical 순서로 정렬한 것을 볼 수 있습니다. 그리고 그것은 아무것도 반환하지 않습니다. 사용자 지정 개체 목록이 있으면 어떻게 됩니까? 물론 정렬도 가능합니다. 클래스 과일을 고려하십시오.

package com.journaldev.collections;
public class Fruit{
    private int id;
    private String name;
    private String taste;

    Fruit(int id, String name, String taste){
        this.id=id;
        this.name=name;
        this.taste=taste;
    }
}

과일 목록을 만들어 봅시다:

List<Fruit> fruitList=new ArrayList<Fruit>();
Fruit apple=new Fruit(1, "Apple", "Sweet");
Fruit orange=new Fruit(2, "Orange", "Sour");
Fruit banana=new Fruit(4, "Banana", "Sweet");
Fruit grape=new Fruit(3, "Grape", "Sweet and Sour");

fruitList.add(apple);
fruitList.add(orange);
fruitList.add(banana);
fruitList.add(grape);
package com.journaldev.collections;
public class Fruit implements Comparable<Object>{
    private int id;
    private String name;
    private String taste;

    Fruit(int id, String name, String taste){
        this.id=id;
        this.name=name;
        this.taste=taste;
    }
    @Override 
    public int compareTo(Object o) {
        Fruit f = (Fruit) o; 
        return this.id - f.id ;
    }
}

이제 Comparable을 구현했으므로 오류 없이 목록을 정렬할 수 있습니다.

Collections.sort(fruitList);
fruitList.forEach(fruit -> {
    System.out.println(fruit.getId() + " " + fruit.getName() + " " + 
      fruit.getTaste());
});

출력은 다음과 같습니다.

1 Apple Sweet
2 Orange Sour
3 Grape Sweet and Sour
4 Banana Sweet

Java 컬렉션 정렬(목록 목록, 비교기 c)

요소의 자연스러운 순서와 다른 맞춤 정렬 논리를 정의하기 위해 java.util.Comparator 인터페이스를 구현하고 인스턴스를 <의 두 번째 인수로 전달할 수 있습니다. 코드>정렬(). Fruit의 "name\ 필드를 기반으로 순서를 정의한다고 가정해 보겠습니다. Comparator를 구현하고 compare() 메서드에서 다음이 필요합니다. 비교 논리를 작성하려면 다음을 수행하십시오.

package com.journaldev.collections;

class SortByName implements Comparator<Fruit> {
    @Override
    public int compare(Fruit a, Fruit b) {
        return a.getName().compareTo(b.getName());
    }
}

이제 이 비교기를 사용하여 정렬할 수 있습니다.

Collections.sort(fruitList, new SortByName());

출력은 다음과 같습니다.

1 Apple Sweet
4 Banana Sweet
3 Grape Sweet and Sour
2 Orange Sour

Comparator용 새 클래스를 작성하는 대신 람다 함수를 사용하여 런타임 시 정렬 논리도 제공할 수 있습니다.

Collections.sort(fruitList, (a, b) -> {
    return a.getName().compareTo(b.getName());
});

자바 Collections.reverseOrder

기본적으로 Collection.sort는 오름차순으로 정렬을 수행합니다. 요소를 역순으로 정렬하려면 다음 방법을 사용할 수 있습니다.

  1. reverseOrder(): 컬렉션 요소의 자연 순서를 반대로 적용하는 Comparator를 반환합니다.
  2. reverseOrder(Comparator cmp): 지정된 비교기의 역순을 부과하는 비교기를 반환합니다.

다음은 이 두 가지 방법에 대한 예입니다.

자바 컬렉션 reverseOrder() 예제

Collections.sort(fruits, Collections.reverseOrder());
System.out.println(fruits);

알파벳 역순으로 과일을 출력합니다.

[Orange, Grape, Banana, Apple]

Java Collections reverseOrder(Comparator cmp) 예제

Collections.sort(fruitList, Collections.reverseOrder(new SortByName()));
fruitList.forEach(fruit -> {
    System.out.println(fruit.getId() + " " + fruit.getName() + " " + 
      fruit.getTaste());
});

산출:

2 Orange Sour
3 Grape Sweet and Sour
4 Banana Sweet
1 Apple Sweet

이것이 Java Collections sort() 메소드의 전부이며 예제입니다. 참조: API 문서