본문 바로가기
Java

[Java] 자바 HashMap 사용법

by _eunji_ 2022. 3. 9.

HashMap이란?

HashMap은 Map 인터페이스를 구현한 대표적인 Map 컬렉션이다.

Map은 키(Key)와 값(Value)으로 구성된 Entry객체를 저장하는 구조를 가지고 있는 자료구조로 키와 값은 모두 객체이다.

값은 중복 저장될 수 있지만 키는 중복 저장될 수 없다.

HashMap은  많은 양의 데이터를 검색하는 데 뛰어나다.


사용 전 import 

import java.util.HashMap;

 

HashMap 선언하기

HashMap을 생성할 때 Key 타입과 Value 타입을 파라미터로 주고 기본생성자를 호출한다.

HashMap<String, Integer> map1 = new HashMap<String,Integer>();//HashMap생성
HashMap<String,Integer> map2 = new HashMap<>(); //타입 파라미터 생략
HashMap<String,Integer> map3 = new HashMap<>(10);//초기 용량 설정

 

 

값 추가하기

put(key,value) 메소드를 사용하여 값을 추가한다.

선언 시 HashMap에 설정해 준 타입과 같은 타입의 Key와 Value값을 넣어야 한다.

만약 입력되는 키 값이 이미 존재한다면 새로 입력되는 값으로 대치된다.

HashMap<String,Ineger> map = new HashMap<String,Ineger>();
map.put("짱구",6); 
map.put("둘리",23);

 

값 제거하기

remove(key) 메서드를 사용하여 값을 제거한다.

clear() 메서드를 사용하여 모든 값을 제거한다.

map.remove("짱구"); 
map.clear(); //모든 값 제거

 

값 출력하기

get(key) 메서드를 이용하여 value값을 반환한다.

HashMap<String,String> map = new HashMap<String,String>(){{//초기값 지정
    put("apple","사과");
    put("banana","바나나");
    put("grape","포도");
}};
		
System.out.println(map); //전체 출력 = {"apple"=사과, "banana"=바나나, "grape"=포도}
System.out.println(map.get(apple));//key값 apple의 value값 = 사과

 

 

getOrDefault(key, defaultVal) : key를 가진 value가 존재하면 값을 반환하고 존재하지 않을 경우 default 값을 반환.

HashMap<String,String> map = new HashMap<String,String>(){{//초기값 지정
    put("apple","사과");
    put("banana","바나나");
    put("grape","포도");
}};
		
System.out.println(map.getOrDefault("apple","사과")); // key "apple"가 존재하므로 "사과" 반환
System.out.println(map.getOrDefault("orange","오렌지")); // key "orange"가 없으므로 "오렌지" 반환

 

HashMap 탐색 방법

  • entrySet()
  • KeySet()

 

 

entrySet()

key와 value를 가지는 Set 객체를 반환

import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;

public class Main{
	public static void main(String[] args){
    	HashMap<Integer,String> map = new HashMap<Integer,String>(){{//초기값 지정
            put(1,"A");
            put(2,"B");
            put(3,"C");
        }};
	for (Entry<Integer, String> entrySet : map.entrySet()) {
		System.out.println(entrySet.getKey() + " : " + entrySet.getValue());
    	} 
        	// 1 : A
		// 2 : B
		// 3 : C
    }
}

 

keySet()

key값만 필요한 경우 사용

for(Integer key : map.keySet()) {
        System.out.println(key+" : "+map.get(key));
    }
// 1 : A
// 2 : B
// 3 : C

 

 

HashMap 정렬

  • key 기준 정렬
  • value 기준 정렬

 

key 기준 정렬

import java.util.Arrays;
import java.util.HashMap;

class Solution{
	public static void main(String args[]) throws Exception{
		HashMap<Integer,String> map = new HashMap<Integer,String>(){{//초기값 지정
            put(4,"B");
            put(1,"D");
            put(2,"A");
            put(3,"C");
        }};
        
        Object[] mapkey = map.keySet().toArray();
        Arrays.sort(mapkey);
        
        for(int key:map.keySet()) {
        	System.out.println("key : " + key + " / " + "value : " + map.get(key));
        }
		
        /*
        key : 1 / value : D
        key : 2 / value : A
        key : 3 / value : C
        key : 4 / value : B
        */
	}
}

 

 

value 기준 정렬

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Collections;

class Solution{
	public static void main(String args[]) throws Exception{
		HashMap<Integer,String> map = new HashMap<Integer,String>(){{//초기값 지정
            put(1,"B");
            put(3,"D");
            put(2,"A");
            put(4,"C");
        }};
        
        List<Integer> keySetList = new ArrayList<>(map.keySet());
		
        // 오름차순 정렬
		Collections.sort(keySetList, (o1, o2) -> (map.get(o1).compareTo(map.get(o2))));

		for(Integer key : keySetList) {
			System.out.println("key : " + key + " / " + "value : " + map.get(key));
		}
		
        /*
        key : 2 / value : A
        key : 1 / value : B
        key : 4 / value : C
        key : 3 / value : D
        */
        
		// 내림차순 정렬
		Collections.sort(keySetList, (o1, o2) -> (map.get(o2).compareTo(map.get(o1))));
		
		for(Integer key : keySetList) {
			System.out.println("key : " + key + " / " + "value : " + map.get(key));
		}
		
         /*
        key : 3 / value : D
        key : 4 / value : C
        key : 1 / value : B
        key : 2 / value : A
        */
	}
}

 

 

 

 


참고

 

'Java' 카테고리의 다른 글

[Java] 자바 스택(Stack) 개념 및 사용법  (0) 2022.03.09
[Java] ArrayList 개념 및 사용 방법  (0) 2022.02.19

댓글