본문 바로가기
Coding/Java

Java - 해시맵 ( HashMap )

by ZaRi 2023. 7. 21.

 

 저번 글에서 컬렉션 중에 리스트에 대해 알아보았고 이번에는 HashMap 에 대해 알아보겠습니다.

 

 


HashMap

 

HashMap은 키(key)와 값(value)으로 이루어진 자료구조입니다. 이는 파이썬의 딕셔너리터럼 순서가 없습니다.

 

선언방법
HashMap<키의 클래스 타입, 값의 클래스 타입> 해시맵이름 = new HashMap<키의 클래스 타입, 값의 클래스 타입>();
ex)
예시1)
HashMap<String, Integer> hm = new HashMap<String, Integer>();

예시2)
HashMap<Integer, Object> hm = new HashMap<Integer, Object>();

 

위 방법대로 선언 하면됩니다. 다만 한가지 주의할 점은 <> 제네릭에는 자료형이 기본타입(ex. int, double, char)이 들어가면 안 되며, 꼭 복합타입(클래스타입)이 들어가야 합니다.

 

 

 

HashMap 메소드

메소드 설명
put(key, value) key에 value 넣고 추가하기
get(key) key에 해당하는 value 반환
remove(key) key와 key에 해당하는 value 삭제
clear() 해시맵에 있는 모든 값 삭제
size() 해시맵 크기 리턴

 

 기본적인 메소드들은 위와 같습니다. 저번시간에 컬렉션 리스트와 거의 메소드 이름과 하는 일이 비슷합니다.

 이 메소드들을 가지고 활용해보겠습니다.

 

 

 

하얀

HashMap 선언

import java.util.*;

public class Search {
    public static void main(String[] args) {
        HashMap<String, Integer> hm = new HashMap<String, Integer>();
    }
}

 

저번처럼 위에 메소드들을 하나씩 실행하는 코드를 만들어보겠습니다.

 

 

 

import java.util.*;

public class Search {
    public static void main(String[] args) {
        HashMap<String, Integer> hm = new HashMap<String, Integer>();

        hm.put("사이다", 1000);
        hm.put("콜라", 1500);
        hm.put("주스", 2000);

        System.out.println(hm.get("콜라"));
    }
}

 

각각 제품에 가격을 메기는 프로그램처럼 만들어보았습니다. 실행해보겠습니다.

 

 

 

1500이-출력됨
활용1

 

 정상적으로 콜라의 값이 출력되는 모습입니다. 마저 clear()와 remove()를 사용해 보겠습니다.

 

 

 

import java.util.*;

public class Search {
    public static void main(String[] args) {
        HashMap<String, Integer> hm = new HashMap<String, Integer>();

        hm.put("사이다", 1000);
        hm.put("콜라", 1500);
        hm.put("주스", 2000);

        System.out.println("hm의 길이: " + hm.size());
        System.out.println(hm.get("콜라"));

        hm.remove("콜라");
        System.out.print("콜라 삭제후 출력: ");
        System.out.println(hm.get("콜라"));

        hm.clear();
        System.out.println("clear() 사용 후 hm의 길이: " + hm.size());
    }
}

 

 

remove("콜라")를 한후 다시 "콜라"를 키값으로 출력해보고, clear()  후에 hm의 자료 크기를 출력하도록 만들어보았습니다.

 

 

 

위-코드를-출력한-결과-사진
활용2

 

 콜라를 키값으로 value를 호출했지만 이미 삭제했기 때문에 null 값이 반환된 모습입니다. clear() 사용후에는 hm의 모든 요소가 삭제되었기에 0이 출력되는 모습입니다.

 

 HashMap 에서 전체 자료를 출력할때는 컬렉션의 리스트와 마찬가지로, Iterator를 사용합니다. 그 부분도 마저 다뤄보겠습니다.

 

 

 

Iterator

HashMap은 iterator 메소드를 지원하지 않기에 좀 돌아서 가야 합니다.

방법 설명
Set<String> ss = hm.keySet();
Iterator<String> it = ss.iterator();
keySet() 메소드를 사용하게 되면 Set<> 자료구조에 key를 넣어 반환하게 됩니다.

Set<> 자료구조는 iterator() 메소드를 지원합니다.

 

위에 까지 했다면 저번에 리스트의 iterator를 활용했던 것과 다 같습니다.

Iterator의 메소드는 다음과 같습니다.

 

 

메소드 설명
hasNext()  다음값이 있는지 확인
next() 다음으로 넘어가서 값을 반환함.

 

그러면 이제 해시맵의 전체 요소를 출력해보겠습니다.

 

 

 

Iterator 활용하기

import java.util.*;

public class Search {
    public static void main(String[] args) {
        HashMap<String, Integer> hm = new HashMap<String, Integer>();

        hm.put("사이다", 1000);
        hm.put("콜라", 1500);
        hm.put("주스", 2000);

        Set<String> ss = hm.keySet();
        Iterator<String> it = ss.iterator();

        while(it.hasNext()){
            String msg = it.next();
            System.out.println("key값: " + msg + ", value값: " + hm.get(msg));
        }
    }
}

 

 이런식으로 while문을 돌면서 key의 값과 value값을 출력하도록 만들어보았습니다.

출력결과를 봐보겠습니다.

 

 

 

hm의-모든-요소들이-출력됨.
Iterator활용

 이런식으로 전체 값을 볼 수 있습니다.

 

 


 저번시간과 이어서 자바의 컬렉션 자료구조에 대해 알아보았습니다. 이번에 어플을 만들면서 HashMap을 요긴하게 사용했었습니다. 확실히 이러한 자료구조는 데이터를 다루기 쉽게 해주고 코드를 효과적으로 줄여주는 것 같습니다.

댓글