정렬?
리스트 같은 자료구조 객체에서 정렬되어 있는 순서를 바꿀때 사용.
원시타입(primitive, 기본형)을 일반적으로 사람들에 통용되는 기준이 있다. 가령 2는 1보다 크다 등등
사용자가 정의한 클래스의 객체의 정렬은 뭐를 기준점으로 둘것인가? 는 개발자가 정의해줘야만 한다.(예를들어 필드가 생년월일과 이름을 가진 객체들이 있다면, 이 객체의 정렬기준은 생년월일이 빠른사람으로 기준으로 하겠다 라고)
자바에서 제공하는 정렬 관련 인터페이스는 Comparable, Comparator.
결론부터 말하자면, Comparable은 클래스 자체의 코드를 수정 가능할 때 사용하면 되고, Comparator은 클래스의 수정이 불가능할때(라이브러리 라덩가) 사용하면 된다. 말그대로 comperator는 정렬기 같은 느낌으로 이해하자.
- Comparable
- 클래스에서 comparable을 implements하고, compareTo 메소드를 오버라이딩 하면 됨
12345678910111213141516171819202122232425262728293031public class ComparableStudy {public static void main(String[] args) {List<Person> people = new ArrayList<>();people.add(new Person(900101, "김구라"));people.add(new Person(951231, "최팩트"));//정렬 전에는 김구라, 최팩트 순으로 되어있고,Collections.sort(people);//정렬 후에는 최팩트, 김구라 순으로 되어있음.}}class Person implements Comparable<Person> {//셋터, 겟터가 들어가면 코드가 길어지니 public으로 함.public int idNumber;public String name;public Person(int idNumber, String name) {super();this.idNumber = idNumber;this.name = name;}@Overridepublic int compareTo(Person o) {if(this.idNumber > o.idNumber){return -1;}return 0;}}cs - Comparator
- Comparator 인터페이스를 compare메쏘드를 오버라이딩하여 객체로 생성해서 사용.
12345678910111213141516171819202122232425262728293031323334public class ComparatorStudy {public static void main(String[] args) {List<Student> students = new ArrayList<>();students.add(new Student(900101, "김구라"));students.add(new Student(951231, "최팩트"));Comparator<Student> studentComparator = new Comparator<Student>() {@Overridepublic int compare(Student o1, Student o2) {if(o1.idNumber > o2.idNumber){return -1;}return 0;}};//정렬 전에는 김구라, 최팩트 순으로 되어있고,Collections.sort(students,studentComparator);//정렬 후에는 최팩트, 김구라 순으로 되어있음.}}class Student {//셋터, 겟터가 들어가면 코드가 길어지니 public으로 함.public int idNumber;public String name;public Student(int idNumber, String name) {super();this.idNumber = idNumber;this.name = name;}}cs
- CompareTo, Compare 메쏘드의 규칙 : '리턴되는 int값이 음수이면 현재 인스턴스가 비교대상인 인스턴스보다 작고, 양수이면 크고, 0 이면 같도록 하자'
더 정리하거나 알아야 할것 :
성능, 양수 음수 리턴이 의미하는 것
참조사이트 :
https://www.daleseo.com/java-comparable-comparator/
https://jeong-pro.tistory.com/173
https://gmlwjd9405.github.io/2018/09/06/java-comparable-and-comparator.html
'IT > 자바' 카테고리의 다른 글
자료구조 정리 잘된 곳 (0) | 2020.05.13 |
---|---|
해쉬코드, 이퀄스 (0) | 2020.05.08 |
해쉬맵 (0) | 2020.05.08 |
자바 디컴파일 (0) | 2020.05.07 |
Volatile 이란? (0) | 2020.05.07 |