SIU
article thumbnail

HashMap은 비선형 자료구조로 인덱스로 정렬하는 선형 자료구조와 정렬 방법이 다릅니다.

HashMap의 Value나 Key 값으로 정렬을 하려면 우선적으로, HashMap(비선형 자료구조)를 List(선형 자료구조)로 바꿔줘야합니다.

 

* 비선형 자료구조 : 일렬로 나열하지 않고 자료 순서나 관계가 복잡한 구조, 트리나 그래프

 

 

해당 샘플은 제가 예시로 넣었습니다.

Value 오름차순 정렬

 

1. Map의 entrySet() 메서드를 (싱글) 링크드 리스트로 변환시켜줍니다.

링크드 리스트로 변환하는 이유는 선형 자료구조로 바꿔주기 위함입니다.

 

링크드 리스트 자료구조

 

2. Entry 내장함수인 compairngByValue()를 통해 정렬해줍니다.

이 정렬 방법은 value 값을 기준으로 오름차순 정렬이 디폴트 입니다.

 

3. for문을 통해 출력해줍니다.

Value 오름차순 정렬

 

Value 내림차순 정렬

 

Value 오름차순과 동일하지만 sort 메서드를 오버라이드로 재정의 해줘야합니다. sort는 디폴트가 오름차순 정렬이기 때문입니다.  내림 차순 정렬 방법은 Comparator(오버라이드) 와 람다식으로 두가지 방법이 있습니다.

 

 

Comparator 

Comparator는 인터페이스로 사용하려면 반드시 구현해야합니다. 해당 메서드 중 사용해야 하는 것은 compare(T o1, T o2) 입니다. 아래의 자바 11 버전 공식문서에서 확인할 수 있습니다. 

 

 

https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/Comparator.html

 

Comparator (Java SE 11 & JDK 11 )

Compares its two arguments for order. Returns a negative integer, zero, or a positive integer as the first argument is less than, equal to, or greater than the second. The implementor must ensure that sgn(compare(x, y)) == -sgn(compare(y, x)) for all x and

docs.oracle.com

compare 공식 문서

핵심은 Comparator을 사용하고자 한다면 compareTo 메소드를 재정의(Override/구현)을 해주어야 합니다. 일반적으로 인자 값이 오름차순 정렬이기(o1 - o2) 때문에 o2, o1 순서를 (o2 - o1)으로 바꿔줍니다. 자바스크립트의 내림차순 sort 방법과 유사합니다.   

 

 

람다식

인자 값을 o2 - o1로 수정하면 쉽게 내림차순으로 정렬됩니다. 

 

Value 내림차순 정렬

 

Comparator VS 람다식

일반적으로 내림차순 정렬은 람다식으로 사용하는 것이 편리하지만, 특정 조건의 새로운 정렬방법을 만족시키는 상황에서는 Comparator로 정렬 방법으로 재정의 해줘야합니다.

profile

SIU

@웹 개발자 SIU

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!