[JAVA] ArrayList 3가지 정렬 방법 정리 (Comparator 인터페이스/익명클래스/람다표현식)

2020. 8. 4. 11:34Programming 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

 

hyunmin94/JavaExam

Contribute to hyunmin94/JavaExam development by creating an account on GitHub.

github.com


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

 

hyunmin94/JavaExam

Contribute to hyunmin94/JavaExam development by creating an account on GitHub.

github.com


람다 표현식을 활용한 정렬

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

 

hyunmin94/JavaExam

Contribute to hyunmin94/JavaExam development by creating an account on GitHub.

github.com

반응형