본문 바로가기

자료구조

JAVA Map 키(Key) 값(Value) 정렬 방법과 자동 정렬 예제

자바에서 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)로 자동 정렬을 해줍니다.

 

출처 : https://ponyozzang.tistory.com/404

'자료구조 ' 카테고리의 다른 글

Collection이란?  (0) 2022.01.29
HashMap  (0) 2022.01.27
List, Map, Set 사용 하는 법  (0) 2022.01.27
스택이란  (0) 2022.01.24