정렬
1. ArrayList 정렬
-
Collections 클래스의 sort() 메서드 사용
- 데이터와 관련된 작업을 도와주는 클래스이며, 내부 메서드는 static 메서드임.
- sort()메서드 내부에 리스트타입을 매개변수로 전달하면 정렬을 해줌.
ArrayList<String> arr = new ArrayList<>();
arr.add("B");
arr.add("D");
arr.add("A");
arr.add("C");
arr.add("D");
for(String item : arr) {
System.out.print(item + " "); // B D A C D
}
1) Collections 클래스의 sort 메서드 사용
Collections.sort(arr); // A B C D D
-
sort() 메서드 사용
2) sort 메서드 사용
arr.sort(Comparator.naturalOrder()); // A B C D D
arr.sort(Comparator.reverseOrder()); // D D C B A
2. 배열(primary type) 정렬
-
Arrays 클래스의 sort() 메서드
int[] arr = {1, 2, 5, 3, 9, 8, 6, 4, 7};
Arrays.sort(arr);
System.out.println(Arrays.toString(arr)); // 1, 2, 3, 4, 5, 6, 7, 8, 9
3. 사용자 정렬
-
Comparable 인터페이스
- 반드시 compareTo 메서드 오버라이드!!
- compareTo가 리턴하는 값: 양수 / 0 / 음수
- 양수: 현재(this) 객체가 추가되는 객체(s)보다 크면 양수
- 0 : 같으면 0 –> 같은 경우 입력순서대로 정렬되는 이슈가 있음!!
- 음수: 현재(this) 객체가 추가되는 객체(s)보다 작으면 음수
public class Student implements Comparable<Student> {
private int no;
private String name;
public Student(int no, String name) {
this.no = no;
this.name = name;
}
@Override
// 출력을 위해 오버라이드 한 부분, 필수 아님
public String toString() {
return no + ": " + name;
}
@Override
// Comparable 인터페이스 상속 시 '반드시' 오버라이드 해야하는 부분
// 무엇을 기준으로 정렬을 하게 될 것인지를 사용자가 특정해주는 부분
public int compareTo(Student s) {
return this.no - s.no;
}
// 해당 메서드는 오름차순 정렬이며, this와 s 순서가 바뀌면 내림차순
public static void main(String[] args) {
ArrayList<Student> st = new ArrayList<>();
st.add(new Student(2, "김철수"));
st.add(new Student(1, "윤경범"));
st.add(new Student(4, "이나연"));
st.add(new Student(3, "박영지"));
방법 1) Collections 클래스 사용
Collections.sort(st);
방법 2)
st.sort(Comparator.naturalOrder()); // 오름차순
st.sort(Comparator.reverseOrder()); // 내림차순도 가능
for(Student s : st) {
System.out.println(s);
}
}
}
###
-
Collections.sort() 메서드 안 매개변수로 정렬기준 제시
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class test7 {
static class Human{
String name;
int old;
Human() {};
Human(String name, int old) {
this.name = name;
this.old = old;
}
}
public static void main(String[] args) {
ArrayList<Human> arr = new ArrayList<>();
arr.add(new Human("홍길동", 15));
arr.add(new Human("김철수", 40));
arr.add(new Human("토레스", 35));
arr.add(new Human("박영희", 35));
System.out.println("=== 정렬전 출력 ===");
for (Human item : arr) {
System.out.println("이름: " + item.name + " 나이: " + item.old);
}
System.out.println();
=== 정렬전 출력 ===
이름: 홍길동 나이: 15
이름: 김철수 나이: 40
이름: 토레스 나이: 35
이름: 박영희 나이: 35
System.out.println("=== 나이순 정렬 ===");
Collections.sort(arr, (x1, x2) -> x1.old - x2.old);
for (Human item : arr) {
System.out.println("이름: " + item.name + " 나이: " + item.old);
}
System.out.println();
=== 나이순 정렬 ===
이름: 홍길동 나이: 15
이름: 토레스 나이: 35
이름: 박영희 나이: 35
이름: 김철수 나이: 40
// String 타입 정렬할 때 방법
System.out.println("=== 이름순 정렬 ===");
Collections.sort(arr, (x1, x2) -> x1.name.compareTo(x2.name));
for (Human item : arr) {
System.out.println("이름: " + item.name + " 나이: " + item.old);
}
System.out.println();
=== 이름순 정렬 ===
이름: 김철수 나이: 40
이름: 박영희 나이: 35
이름: 토레스 나이: 35
이름: 홍길동 나이: 15
}
}
참고 1: 우선순위큐에서 오름차순, 내림차순 정렬 예시
참고 2: 정렬 관련 문제
참고 3: 정렬 관련 블로그 게시물
마지막 수정일시: 2022-06-30 16:23
댓글남기기