Sort

duckbill413·2023년 8월 13일
0

Java

목록 보기
2/5
post-thumbnail

Sort

Primitive type Sorting

Primitive type array의 sort는 Arrays.sort() 메소드를 사용한다.

  • Arrays.sort()void 리턴을 가진다.
    • `String.replaceOf("s", "a")는 String 객체를 리턴

      int[] num1 = { 50, 24, 67, 85, 75 };
      Arrays.sort(num1);
      System.out.println(Arrays.toString(num1));
    • 기본적으로 오름차순으로 정렬된다.

List의 Sorting

  • Collection.sort()를 이용해서 오름차순으로 정렬 가능하다.
  • Collection.revere()를 이용해서 내림차순으로 정렬 가능하다.

Comparable

public class Car implements Comparable<Car>{
	private String maker;
	@Override
	public int compareTo(Car o) {
		// TODO Auto-generated method stub
		return this.maker.compareTo(o.getMaker()); // 메이커를 기준으로 정렬
	}
}
  • Comparable을 사용하면 Collections.sort()에서 compareTo를 사용하여 정렬한다.
  • Comparable은 다양한 정렬 조건을 적용하여 정렬하는 것은 무리가 있다.

Comparator

Integer list의 정렬

Collections.sort(list, new Comparator<Integer>() {
	@Override
	public int compare(Integer o1, Integer o2) {
		// TODO Auto-generated method stub
		return o2.intValue() - o1.intValue();
	}
});
  • 뒤 - 앞 (내림차순)
  • 앞 - 뒤 (오름차순)

Comparator을 이중 정렬

class Person {
	int id;
    int age;
    
    public int getAge() {
       return age;
    }
}

위와 같은 Person 클래스에 대해서 먼저 age에 대하여 내림차순 정렬 age가 같다면 id에 대해서 오름차순으로 정렬해 보자

Collections.sort(list, new Comparator<Person>() {
	@Override
    public int compare(Person p1, Person p2) {
    	if (p1.age == p2.age) {
        	return p1.id - p2.id;
        }
		
        return p2.age - p1.age;
}

위와 같이 이중 정렬을 사용할 수 있다.

Lamda식의 활용

람다식을 활용하여 Person 클래스의 age 내림차순으로 PriorityQueue를 선언해 보겠습니다.

방법 1) 
new PriorityQueue<>((o1, o2) -> o2.age - o1.age);

방법 2)
new PriorityQueue<>((o1, o2) -> Integer.compare(o2.getAge(), o1.getAge()));

추가로 Comparator.comparing()를 활용하여 정렬하는 방법도 가능하다.

Collections.sort(list, Comparator.comparing(Person::getAge));
profile
같이 공부합시다~

0개의 댓글