본문 바로가기

Comparator2

[자바 이슈] Comparator 사용 관련 주의 알고리즘 문제를 풀다가 Comparator를 사용했는데 처음 보는 경우를 발견했다. 1. 런타임 에러 발생 코드 Arrays.sort(nodes, new Comparator() { @Override public int compare(int[] o1, int[] o2) { if(o2[1] > o1[1]) return 1; return -1; } }); 처음에 적은 코드이다. 내림차순 정렬을 하기 위해서 자리를 바꿔야 하면 1을 반환, 아니면 -1을 반환했는데 계속 몇몇 테스트 케이스에서 런타임 에러가 발생했다. 2. 정상 동작 코드 Arrays.sort(nodes, (o1, o2) -> o2[1] - o1[1]); 그리고 나중에 고친 코드이다. (람다식은 중요하지 않다.) 이건 정상적으로 돌아가는 코드인데.. 2020. 9. 9.
[자바] Comparable, Comparator Interface Comparable 어떤 객체들을 정렬할 때 어떤 기준으로 정렬할지 정할 수 있게 해주는 기능을 제공하는 인터페이스 객체들의 기본이 되는 정렬 기준을 정의하는 역할 객체들은 Collection.sort() 메서드(혹은 Arrays.sort()) 를 이용해서 정렬을 하게 되는데 이 때 Comparable을 implements한 클래스의 객체라면 클래스 내부에 compareTo() 메서드를 오버라이드해서 미리 정렬 기준을 정해놓을 수 있다. Integer, Long, Double 등의 Wrapper 클래스들은 기본적으로 다 Comparable을 구현하고 있다. (기본적으로 오름차순으로 정렬됨) compareTo(Object o) 이 때 Object o는 현재 객체보다 뒤에 있는 객체를 의미.. 2020. 9. 1.