차곡차곡 성 쌓기
article thumbnail

Arrays.sort()

  • 배열을 정렬하는데 사용  ('int [] ', 'String []' 등)
  • 기본 데이터 타입 배열, 객체 배열 모두에 사용 가능
  • 주어진 배열 직접 변경

 

Collections.sort()

  • 컬렉션을 정렬하는 데 사용('List', 'Set' 등)
  • 주어진 컬렉션을 직접 변경

둘 다 Comparable 인터페이스나 Comparator 인터페이스 중 하나를 구현하고 있어야 한다. 이 둘의 차이는 무엇일까? 알아본다.

 

 

 

Comparable 인터페이스

  • 객체가 자연스러운 순서를 갖도록 하는 것이 목표
  • 객체 자체가 비교 로직을 구현
  • compareTo 메소드 제공해야함
    • 메소드는 현재 객체가 다른 객체보다 작으먄 음수, 같은 0, 크면 양수를 반환해야 함
<java />
List<Person> people = new ArrayList<>(); // ... (people에 객체 추가) Collections.sort(people); // Comparable을 사용하여 정렬 public class Person implements Comparable<Person> { private String name; private int age; // ... (생성자, 다른 메소드 등) @Override public int compareTo(Person otherPerson) { // 비교 로직을 구현하여 자연스러운 순서 정의 return this.age - otherPerson.age; } }

 

 

 

Comparator 인터페이스

  • 객체의 정렬 순서를 변경하거나 특정 비교 기준 제공하는 것이 목표
  • 외부에서 객체들의 정렬 순서를 제어하고자 할 때 사용
  • Comparator 인터페이스를 구현한 별도의 클래스를 생성하여 제공
  • compare 메소드를 구현 - 반환값에 따라 순서 결정
    • 반환 값이 양수이면 첫 번째 객체(o1)이 두 번째 객체(o2)보다 크다고 판단 
    • o1.value - o2.value => 오름차순 정렬
    • o2.value - o1.value => 내림차순 정렬
<java />
List<Person> people = new ArrayList<>(); // ... (people에 객체 추가) AgeComparator ageComparator = new AgeComparator(); Collections.sort(people, ageComparator); // Comparator를 사용하여 정렬 Collections.sort(list, (o1, o2) -> o2.value - o1.value); // 내림차순 정렬 public class AgeComparator implements Comparator<Person> { @Override public int compare(Person person1, Person person2) { // 비교 로직을 구현하여 나이를 기준으로 정렬 return person1.getAge() - person2.getAge(); } }
profile

차곡차곡 성 쌓기

@nagrang

포스팅이 좋았다면 좋아요