자바에서 HashMap에 저장한 데이터를 정렬하는 방법을 알아보겠습니다.
정렬은 키(Key) 또는 값(Value)으로 할 수 있습니다.
그리고 자동으로 정렬하는 방법도 같이 알아보겠습니다.
HashMap 키(Key) 정렬
먼저 HashMap을 키(Key)로 정렬하는 방법을 보겠습니다.
HashMap을 정렬하기 위해서는 Arrays.sort 메서드를 사용합니다.
Arrays.sort 사용하기 위해서는 java.util.Arrays를 import 해줘야 합니다.
HashMap 키 정렬 예제
import java.util.Map;
import java.util.HashMap;
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
// Map 선언
Map<Integer, String> testMap = new HashMap<Integer, String>();
// Map에 데이터 추가
testMap.put( 1, "apple");
testMap.put( 4, "pineapple");
testMap.put( 2, "orange");
testMap.put( 5, "strawberry");
testMap.put( 3, "melon");
// 키로 정렬
Object[] mapkey = testMap.keySet().toArray();
Arrays.sort(mapkey);
// 결과 출력
for (Integer nKey : testMap.keySet())
{
System.out.println(testMap.get(nKey));
}
}
}
결과
apple
orange
melon
pineapple
strawberry
예제에서는 Map 변수인 testMap에 키(Key)를 1,4,2,5,3 순서로 데이터를 추가했습니다.
Object 클래스를 선언하고 변수 testMap에 저장한 키를 취득해왔습니다.
키만 추출한 Object 클래스인 변수 mapkey를 Arrays.sort를 사용하여 정렬하였습니다.
정렬한 키를 가지고 for 문으로 순서대로 출력하고 있습니다.
HashMap 값(Value) 정렬
이번에는 값(Value)으로 정렬하는 예제를 보겠습니다.
값으로 정렬을 하기 위해서는 compareTo를 사용합니다.
값(Value) 오름 차순 정렬 예제
import java.util.Map;
import java.util.Map.Entry;
import java.util.HashMap;
import java.util.List;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
public class Main {
public static void main(String[] args) {
Map<String, Integer> testMap = new HashMap<String, Integer>();
// Map에 데이터 추가
testMap.put( "apple", 1);
testMap.put( "orange", 2);
testMap.put( "pineapple", 4);
testMap.put( "strawberry", 5);
testMap.put( "melon", 3);
// Map.Entry 리스트 작성
List<Entry<String, Integer>> list_entries = new ArrayList<Entry<String, Integer>>(testMap.entrySet());
// 비교함수 Comparator를 사용하여 오름차순으로 정렬
Collections.sort(list_entries, new Comparator<Entry<String, Integer>>() {
// compare로 값을 비교
public int compare(Entry<String, Integer> obj1, Entry<String, Integer> obj2) {
// 오름 차순 정렬
return obj1.getValue().compareTo(obj2.getValue());
}
});
System.out.println("오름 차순 정렬");
// 결과 출력
for(Entry<String, Integer> entry : list_entries) {
System.out.println(entry.getKey() + " : " + entry.getValue());
}
}
}
결과
오름 차순 정렬
apple : 1
orange : 2
melon : 3
pineapple : 4
strawberry : 5
HashMap에 저장한 데이터 값을 가지고 정렬을 했습니다.
값을 Comparator 함수를 사용하여 비교하는 방법으로 정렬했습니다.
정렬은 작은 값부터 큰 값 순서로 오름 차순 정렬이 되었습니다.
이번에는 반대로 내림 차순 정렬을 하는 예제를 보겠습니다.
값(Value) 내림 차순 정렬 예제
import java.util.Map;
import java.util.Map.Entry;
import java.util.HashMap;
import java.util.List;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
public class Main {
public static void main(String[] args) {
Map<String, Integer> testMap = new HashMap<String, Integer>();
// Map에 데이터 추가
testMap.put( "apple", 1);
testMap.put( "orange", 2);
testMap.put( "pineapple", 4);
testMap.put( "strawberry", 5);
testMap.put( "melon", 3);
// Map.Entry 리스트 작성
List<Entry<String, Integer>> list_entries = new ArrayList<Entry<String, Integer>>(testMap.entrySet());
// 비교함수 Comparator를 사용하여 내림 차순으로 정렬
Collections.sort(list_entries, new Comparator<Entry<String, Integer>>() {
// compare로 값을 비교
public int compare(Entry<String, Integer> obj1, Entry<String, Integer> obj2)
{
// 내림 차순으로 정렬
return obj2.getValue().compareTo(obj1.getValue());
}
});
System.out.println("내림 차순 정렬");
// 결과 출력
for(Entry<String, Integer> entry : list_entries) {
System.out.println(entry.getKey() + " : " + entry.getValue());
}
}
}
결과
내림 차순 정렬
strawberry : 5
pineapple : 4
melon : 3
orange : 2
apple : 1
큰 값 부터 작은 값 순서대로 정렬이 되었습니다.
TreeMap 자동 정렬
TreeMap을 사용한 자동 정렬 예제를 보겠습니다.
TreeMap 기본적인 사용 방법은 HashMap과 같습니다.
하지만 TreeMap은 put 메서드를 사용해 값을 저장하면 자동으로 정렬을 합니다.
TreeMap 자동 정렬 예제
import java.util.Map;
import java.util.TreeMap;
public class Main {
public static void main(String[] args) {
// Map 선언
Map<Integer, String> testMap = new TreeMap<Integer, String>();
// Map에 데이터 저장
testMap.put(1, "apple");
testMap.put(5, "pineapple");
testMap.put(2, "orange");
testMap.put(3, "strawberry");
testMap.put(4, "melon");
// 결과 출력
for (Integer nKey : testMap.keySet())
{
System.out.println(testMap.get(nKey));
}
}
}
결과
apple
orange
strawberry
melon
pineapple
TreeMap에 저장한 데이터를 특별한 정렬 처리를 하지 않고 바로 출력했습니다.
결과는 키(Key)로 자동 정렬되어서 출력되었습니다.
정리
HashMap을 키와 값으로 정렬하는 방법을 알아봤습니다.
키로 정렬하기 위해서는 Array.sort를 사용했습니다.
값으로 정렬하기 위해서는 비교 함수인 compareTo를 사용해서 정렬했습니다.
TreeMap을 사용하면 데이터를 저장할 때 키(Key)로 자동 정렬을 해줍니다.
댓글