[JAVA] ArrayList 3가지 정렬 방법 정리 (Comparator 인터페이스/익명클래스/람다표현식)
2020. 8. 4. 11:34ㆍProgramming Language/JAVA
반응형
■ 기준 클래스 준비
public class Person {
String name;
int weight;
public Person(String name, int weight) {
this.name = name;
this.weight = weight;
}
@Override
public String toString() {
return "Person [name=" + name + ", weight=" + weight + "]";
}
}
■ Comparator 인터페이스를 이용한 ArrayList 정렬
1) Comparator 인터페이스를 구현한 클래스 준비
Person 객체의 weight 인스턴스 변수를 이용한 정렬
- 내림차순 정렬
- 오름차순 정렬
class ComparatorPerson implements Comparator<Person> {
@Override
public int compare(Person o1, Person o2) {
// ※ weight 변수를 이용한 정렬
// 1 -- 내림 차순 정렬
int result = 1;
if (o1.weight >= o2.weight)
result = -1;
return result;
// 2-- 오름 차순 정렬
// int result = -1;
// if (o1.weight >= o2.weight)
// result = 1;
// return result;
}
}
2) Comparator 인터페이스를 이용한 ArrayList 정렬
- List의 sort 메서드를 이용한 정렬
- Collections의 sort 메서드를 이용한 정렬
public class ComparatorTest {
public static void main(String[] args) {
List<Person> personList = new ArrayList<Person>();
personList.add(new Person("HAN", 160));
personList.add(new Person("HONG", 170));
personList.add(new Person("KIM", 180));
// 정렬 전 데이터 확인
for(Person person : personList) {
System.out.println("정렬 전 : " + person);
}
// 1 -- List의 sort 메서드를 이용한 정렬
// personList.sort(new comparatorPerson());
// 2 -- Collections의 sort 메서드를 이용한 정렬
Collections.sort(personList, new ComparatorPerson());
// 정렬 후 데이터 확인
Iterator<Person> itp = personList.iterator();
while (itp.hasNext()) {
System.out.println("정렬 후 : " + itp.next());
}
}
}
3) 출력 결과
weight 변수를 기준으로 내림차순 정렬
- 빨간색 체크 : 정렬 전 데이터 확인
- 파란색 체크 : 정렬 후 데이터 확인
SOURCE CODE
■ interface의 익명클래스 처리방법을 활용한 정렬
1) interface의 익명클래스 처리방법을 활용한 정렬
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.Iterator;
import java.util.List;
public class AnonymousClassSort {
public static void main(String[] args) {
List<Person> personList = new ArrayList<Person>();
personList.add(new Person("HAN", 160));
personList.add(new Person("HONG", 170));
personList.add(new Person("KIM", 180));
// 정렬 전 데이터 확인
for (Person person : personList) {
System.out.println("정렬 전 : " + person);
}
// 익명클래스를 활용한 내림차순 정렬
Collections.sort(personList, new Comparator<Person>() {
@Override
public int compare(Person o1, Person o2) {
// 1 -- 내림 차순 정렬
int result = 1;
if (o1.weight >= o2.weight)
result = -1;
return result;
// 2-- 오름 차순 정렬
// int result = -1;
// if (o1.weight >= o2.weight)
// result = 1;
// return result;
}
});
// 정렬 후 데이터 확인
Iterator<Person> itp = personList.iterator();
while (itp.hasNext()) {
System.out.println("정렬 후 : " + itp.next());
}
}
}
2) 출력 결과
weight 변수를 기준으로 내림차순 정렬
- 빨간색 체크 : 정렬 전 데이터 확인
- 파란색 체크 : 정렬 후 데이터 확인
SOURCE CODE
■ 람다 표현식을 활용한 정렬
1) 람다 표현식을 활용한 정렬
import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
public class LambdaSort {
public static void main(String[] args) {
List<Person> personList = new ArrayList<Person>();
personList.add(new Person("HAN", 160));
personList.add(new Person("HONG", 170));
personList.add(new Person("KIM", 180));
// 정렬 전 데이터 확인
for (Person person : personList) {
System.out.println("정렬 전 : " + person);
}
// 람다표현식을 활용한 내림차순 정렬
Collections.sort(personList, (Person o1, Person o2) -> {
// 1 -- 내림 차순 정렬
int result = 1;
if (o1.weight >= o2.weight)
result = -1;
return result;
// 2-- 오름 차순 정렬
// int result = -1;
// if (o1.weight >= o2.weight)
// result = 1;
// return result;
});
// 정렬 후 데이터 확인
Iterator<Person> itp = personList.iterator();
while (itp.hasNext()) {
System.out.println("정렬 후 : " + itp.next());
}
}
}
2) 출력 결과
weight 변수를 기준으로 내림차순 정렬
- 빨간색 체크 : 정렬 전 데이터 확인
- 파란색 체크 : 정렬 후 데이터 확인
SOURCE CODE
반응형
'Programming Language > JAVA' 카테고리의 다른 글
[JAVA] JVM의 메모리 구조 (0) | 2020.08.05 |
---|---|
[JAVA] Map 계열 (Hashtable/HashMap/Properties) 정리 (0) | 2020.08.04 |
[Eclipse] 이클립스(Eclipse) 한글 깨짐 현상 해결 (0) | 2020.08.04 |
[JAVA] 컬렉션(Collection API) 정리 (Set 계열/List 계열) (2) | 2020.08.03 |
[JAVA] 제네릭(Generic) 정리 (0) | 2020.08.03 |