Java 컬렉션 정렬()
오늘은 Java Collections 정렬 방법에 대해 살펴보겠습니다. Java에서 컬렉션으로 작업하는 동안 데이터를 정렬해야 하는 경우가 더 많습니다.
Java 컬렉션 정렬()
Java Collections 클래스는 모든 ArrayList를 정렬하는 매우 편리한 메서드 Collections.sort()
를 제공합니다. 오버로드된 두 가지 Collections.sort()
메서드는 다음과 같습니다.
sort(List list)
: 자연 순서의 오름차순으로 List의 요소를 정렬합니다.sort(List list, Comparator c)
: 비교기에 의해 유도된 순서에 따라 목록의 요소를 정렬합니다.
위의 메서드 시그니처는 제네릭을 사용하지만 여기에서는 읽기 쉽게 하기 위해 제네릭을 제거했습니다. 이 두 가지 방법을 언제 어떻게 사용할 수 있는지 하나씩 살펴보겠습니다.
Java 컬렉션 정렬(목록 목록)
String
의 ArrayList
를 고려하십시오.
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
는 오름차순으로 정렬을 수행합니다. 요소를 역순으로 정렬하려면 다음 방법을 사용할 수 있습니다.
reverseOrder()
: 컬렉션 요소의 자연 순서를 반대로 적용하는Comparator
를 반환합니다.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 문서