Tizesin 2024. 6. 16. 08:01

** 자기 공부용 및 암기용으로 포스팅하는 글 입니다.

** 정확한 정보는 보장 할 수 없으니, 참고용으로만 봐주시면 감사하겠습니다.

** 제 개인적인 생각 및 자기 암시목적으로 작성되기에 이점 양해 부탁드립니다.


들어가기에 앞서..

어쩌다 보니 포스팅 순서가 뒤죽박죽이 되어버렸다..

Map은 JAVA나 SPRING에서 많이 쓰이는 Collection 프레임워크이다. 

값과 쌍을 저장 할 수 있기에 많이 쓰이니 꼭 알아두고 가자.


★ 알아볼 내용

 1.  Map의 정의 및 저장 방식

 2.  Map 공통 메서드

 3.  HashMap 메서드


내용 설명 

 1.  Map의 정의 및 저장 방식

맵은 위 머릿말 글과 같이 키(Key)와 값(value)으로 구성된 객체를  저장하는 구조로 되어있다.

이 객체를 Entry객체라고 하는데 이 entry객체는 키와 값을 각각 key 객체와 value 객체로 저장한다.

Map을 사용할때 Key는 중복으로 저장될 수 없는 특징을 가지고 있다.

그에 반해 value는 중복 저장이 가능하다.

마치 데이터베이스에서 일반 value와 Primary Key와 비슷한 개념으로 생각하면 되겠다.

만약 기존에 저장된 키와 같은 키로 값을 저장하게 될 경우 기존의 값이 새로운 값으로 대체 된다.


 

 2.  Map 공통 메서드

Map 인터페이스를 구현한 클래스에서 공통으로 사용할 수 있는 메서드는 아래와 같다.

List가 인덱스를 기준으로 관리되는 반면에, Map은 키(key)로 객체들을 관리하기 때문에 키를 매개값으로 갖는 메서드가 많다.

기능 Return Type Method Info
객체 추가 Object put(Object Key, Object value) 주어진 키로 값을 저장. 해당 키가 새로운 키일 경우 null을 리턴. 같은 키가 있으면 기존의 값을 대체하고 대체 되기 이전의 값을 리턴합니다.
객체 검색 boolean containsKey(Object key) 주어진 키가 있으면 true, 없으면 false를 리턴
boolean containsValue(Object value)
Set  entrySet() 키와 값의 쌍으로 구성된 모든 Map.Entry 객체를 Set에 담아서 리턴
Object get(Object key) 주어진 키에 해당하는 값을 리턴
boolean isEmpty() 컬렉션이 비어 있는지 확인
Set keySet() 모든 키를 Set객체에 담아서 리턴
int size() 저장된 Entry 객체의 총 갯루를 리턴
Collection values() 저장된 모든 값을 Collection에 담아서 리턴
객체 삭제 void clear() 모든 Map.Entry(키와 값)을 삭제합니다.
Object remove(Object key) 주어진 키와 일치하는 Map.Entry를 삭제하고 값을 리턴.

 

 


 

 3.  HashMap 메서드

HashMap은 Map 인터페이스를 구현한 대표적은 클래스. 

HashMap은 해시 함수를 통해 Key와 Value가 저장되는 위치를 결정하므로, 사용자는 그 위츠를 알수 없으며 삽입되는 순서와  위치 또한 관계가 없다.

해싱 함수를 사용하기에 많은 양의 데이터를 검색하는데 빠른 속도를 보인다.

 Return Type Method Info
boolean equals(Object o) 동일한 Entry 객체인지 비교
Object getKey() Entry 객체의 Key 객체를 반환
Object ghetValue() Entry 객체의 Value 객체를 반환
int hashCode() Entry 객체의 해시코드를 반환
Object setValue(Object value) Enmtry 객체의 Value 객체를 인자로 전달한 value객체로 바꿈

 

 HashMap을 사용하는 예시를 한번 봐 보자

import java.util.*;

public class HashMapExample {
    public static void main(String[] args) {

	    // HashMap 생성
        HashMap<String, Integer> map = new HashMap<>();

        // Entry 객체 저장
        map.put("피카츄", 85);
        map.put("꼬부기", 95);
        map.put("야도란", 75);
        map.put("파이리", 65);
        map.put("피존투", 15);

        // 저장된 총 Entry 수 얻기
        System.out.println("총 entry 수: " + map.size());

        // 객체 찾기
        System.out.println("파이리 : " + map.get("파이리"));

        // key를 요소로 가지는 Set을 생성 -> 아래에서 순회하기 위해 필요합니다.
        Set<String> keySet = map.keySet();

        // keySet을 순회하면서 value를 읽어옵니다.
        Iterator<String> keyIterator = keySet.iterator();
        while(keyIterator.hasNext()) {
            String key = keyIterator.next();
            Integer value = map.get(key);
            System.out.println(key + " : " + value);
        }

        // 객체 삭제
        map.remove("피존투");

        System.out.println("총 entry 수: " + map.size());

        // Entry 객체를 요소로 가지는 Set을 생성 -> 아래에서 순회하기 위해 필요합니다.
        Set<Map.Entry<String, Integer>> entrySet = map.entrySet();

        // entrySet을 순회하면서 value를 읽어옵니다.
        Iterator<Map.Entry<String, Integer>> entryIterator = entrySet.iterator();
        while(entryIterator.hasNext()) {
            Map.Entry<String, Integer> entry = entryIterator.next();
            String key = entry.getKey(); // Map.Entry 인터페이스의 메서드
            Integer value = entry.getValue(); // Map.Entry 인터페이스의 메서드
            System.out.println(key + " : " + value);
        }

        // 객체 전체 삭제
        map.clear();
    }
}

 

Map은 키와 값을 쌍으로 저장하기 때문에 iterator()를 직접 호출하여 사용할 수 없다.

대신 KeySet()이나 entrySet() 메서드를 이용하여 Set형태로 반환된 컬렉션에 iterator()를 호출하여 반복자를 만들어 순회하는 방식으로 진행된다.