본문 바로가기
CS/Data Structure

[자료구조] HashMap(해쉬맵) - Java Collections Framework

by 테리는당근을좋아해 2020. 3. 23.

HashMap(해쉬맵)

HashMap이란 Map인터페이스 중 하나로써, key와 Value값으로 묶어 데이터를 저장하는 자료구조이다.

 

Hashing을 사용하므로써 많은양의 데이터를 검색하는데 뛰어난 성능을 가지고 있다.

 

java Collections Framework에서 해쉬맵의 자세한 사용법은 아래 코드를 참조하자

package algorithm;

import java.util.*;

public class hashmap {
	public static void main(String[] args) {
		HashMap<String, Integer> map = new HashMap<>();
		
		// 데이터 삽입 
		map.put("apple", 2018);
		map.put("banana", 2011);
		map.put("melon", 2013);
		map.put("kiwi", 2015);
		
		// 중복된 키값을 저장할 경우 이전에 저장된 key - vlaue 쌍 위에 새로 저장
		map.put("kiwi", 2017);
		
		// 데이터 삭제 
		map.remove("apple");
		
		// 데이터 출력
		// 해쉬맵은 데이터를 저장한 순서대로 출력하지 않는다.
		for(String s : map.keySet()) {
			System.out.println(s + " " + map.get(s));
		}
	}
}

 

해쉬맵일 사용함에 있어서 주의할 점은

 

키 값의 중복을 허용하지 않는다는 점이다. value는 중복이 허용되지만  key값을 중복 저장할 경우 

 

이전에 저장된 key값에 덮어씌워지게 된다.

 

또한 해쉬맵은 데이터를 저장한 순서대로 출력되지않는다.

 

해쉬맵을 정렬은 key, value에 따라 정렬이 가능하고,

 

value값을 기준으로 정렬하기위해서 아래와 같이 별도의 메소드를 정의해주어야한다.

 

Key값에 의한 정렬

package algorithm;

import java.util.*;

public class hashmap {
	public static void main(String[] args) {
		HashMap<Integer, String> map = new HashMap<>();
		
		// 데이터 삽입 
		map.put(1, "apple");
		map.put(2, "banana");
		map.put(3, "melon");
		map.put(4, "kiwi");
		
		Iterator<Integer> it = map.keySet().iterator();
		while(it.hasNext()) {
			int key = it.next();
			System.out.println(key + " " + map.get(key));
		}
	}
}

 

Value값에 의한 정렬

package algorithm;

import java.util.*;

public class hashmap {
	// 정렬 메소드 정의 
	public static List sortByValue(final Map map) {
		List<String> list = new ArrayList<>();
		list.addAll(map.keySet());
		
		Collections.sort(list, new Comparator() {
			public int compare(Object o1, Object o2) {
				Object v1 = map.get(o1);
				Object v2 = map.get(o2);
				
				return((Comparable)v2).compareTo(v1);
			}
		});
		
		Collections.reverse(list);
		return list;
	}
	
	public static void main(String[] args) {
		HashMap<String, Integer> map = new HashMap<>();
		
		// 데이터 삽입 
		map.put("apple", 2018);
		map.put("banana", 2011);
		map.put("melon", 2013);
		map.put("kiwi", 2015);
		
		Iterator it = sortByValue(map).iterator();
		while(it.hasNext()) {
			String s = (String)it.next();
			System.out.println(s + " " + map.get(s));
		}
	}
}

댓글