정렬
순서를 가지는 Collection들만 정렬 가능
- List 계열
- Set에서는 SortedSet의 자식 객체
- Map에서는 SortedMap의 자식 객체(key 기준)
Coleections의 sort()를 이용한 정렬
List<String> names = Arrays.asList("Hi", "Java", "World", "Welcome");
Collections.sort(names);
System.out.println(names);
[Hi, Java, Welcome, World]
Comparable 인터페이스 implements / String 클래스의 compareTo 메서드를 override하여 사용하는 정렬
public class SmartPhone implements Comparable<SmartPhone>{
// Comparable<T>의 타입에는 비교하려는 객체의 타입을 넣어 주어야 한다.
private String number;
public SmartPhone(String number) {
this.number = number;
}
@Override
public int compareTo(SmartPhone o) {
// String 클래스의 compareTo 메서드를 재사용
// 폰 번호 기준으로 오름차순 정렬이 된다.
return this.number.compareTo(o.number);
}
}
Comparator 인터페이스 implements / compare 메서드를 override하여 사용하는 정렬
// 익명 클래스(new Comparator<String>(){}); 사용
Collections.sort(names, new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
return Integer.compare(o1.length(), o2.length());
}
});
익명 클래스 (anonymous inner class)
comparator은 인터페이스인데 new Comparator로 사용
Comparator<String>을 implements 받는 클래스를 생성 하지 않고,
1회성으로 기능을 바로 구현하여 사용할 수 있음
1회성이 아닌 여러번 사용해야해서 익명 클래스를 사용하지 않는다면
// String 객체 끼리 비교 : 글자 길이 기준으로 오름차순 정렬
public class StringLengthComparator implements Comparator<String>{
@Override
public int compare(String o1, String o2) {
int len1 = o1.length();
int len2 = o2.length();
return Integer.compare(len1, len2);
}
}
public void stringLengthSort() {
Collections.sort(names, new StringLengthComparator());
System.out.println(names);
}
'Java' 카테고리의 다른 글
[Java] Serializable (0) | 2022.07.28 |
---|---|
[Java] Lambda (0) | 2022.07.27 |
[Java] Map (0) | 2022.07.27 |
[Java] Collection Framework (0) | 2022.07.26 |
[Java] 접근제한자 (0) | 2022.07.22 |