본문 바로가기
카테고리 없음

자바 컬렉션 정리 (2) - Map

by 위시우 2024. 1. 30.

자바 컬렉션 정리 (2) - Map

Map 은 python 에서 자주 쓰던 dictionary 와 같다.

Key : Value의 쌍으로 구성되어 data 를 넣어놓기에 유용하다.

Map 은 인터페이스이고, 이를 구현하기 위한 구현체로 HashMap, TreeMap, LinkedHashMap 등이 있다.

그 중 HashMap 에 대해 자세히 정리해보겠다.

HashMap

  1. Map 의 구현체
  2. Key, Value 로 구성된 Entry 객체를 저장하는 구조임
  3. Key, Value 역시 모두 객체임
  4. 파이썬의 Dictionary 와 마찬가지로 Key 는 중복될 수 없다. 같은 Key 로 값을 저장하면 기존의 값은 없어지고 새로운 값으로 엎어친다.
  5. Hashing 을 사용하기 때문에 많은 양의 데이터를 검색할 때 뛰어난 성능을 보인다.

Hashing 이란

Hash 합수를 이용해서 데이터를 해시 테이블에 저장하고 검색하는 기법이다.
데이터가 저장되어 있는 곳을 알려주며, 다량의 데이터 중에서 원하는 데이터를 빠르게 찾을 수 있다.

Key 값을 Hashing 하여 저장하는 Bit 이라는 곳에 저장한다고 하는데, 일단은 잘 모르겠다.
지금은 일단 어떻게 사용하는지에 대해서만 간략하게 정리해두고 ,
다시 이해도가 높아졌을때 볼만한 내부 구현과 관련되어 참고할만한 컨텐츠를 정리해두었다.

Java의 HashMap에 대해
해싱, 해시함수, 해시테이블 · ratsgo's blog
일단 넘어가 보자.


HashMap 사용법

  1. 선언
HashMap<String, String> map1 = new HashMap<String, String>(); // 생성
HashMap<String, String> map2 = new HashMap<>(map1); // map1 모든 값을 가진 HashMap 생성
HashMap<String, String> map3 = new HashMap<>(10); // 초기 용량 지정
HashMap<String, String. map5 = new HashMap<>(10, 0.7f); 
  1. 추가 : put
import java.util.HashMap;
import java.util.Map;

public class TestHashMap {
    public static void main(String[] args) {
        // Map 일단 하나 생성할 것
        HashMap<String, Integer> map1 = new HashMap<>();
        map1.put("Don", 2);
        map1.put("Ken", 3);
        map1.put("Oksu", 5);

    }
}
  1. containsKey : HashMap 에 키가 있는지 여부 확인
    public static void main(String[] args){
     Map<Integer, String> map = new HashMap<>();
     map.put(1, "Don");
     map.put(2, "Ken");
     map.put(3, "Han");
     if (!map.containsKey(2)) map.put(2, 300);
     System.out.println(map);
     System.out.println(map.get(1));
    }
  2. remove : 요소 제거
import java.util.HashMap;
import java.util.Map;

public class TestHashMap {
    public static void main(String[] args) {
        HashMap<String, Integer> map1 = new HashMap<>();
        map1.put("George", 2);
        map1.put("Elison", 3);
        map1.put("Elizabeth", 5);
        map1.put("Oksu", 10);

        map1.remove("Oksu"); // 제거
    }
}
  1. HashMap 값 출력
  • entrySet() : key + value entry 를 Set 으로 넘기고, for 문을 통해 Set 을 확인하는 방식
  • keySet() : key 를 Set 으로 넘기고, for 문을 통해 map.get(key) 로 value 를 확인하는 방식
import java.util.HashMap;
import java.util.Map;

public class TestHashMap {
    public static void main(String[] args) {
        // Map 일단 하나 생성할 것
        HashMap<String, Integer> map1 = new HashMap<>();
        map1.put("Don", 2);
        map1.put("Ken", 3);
        map1.put("Oksu", 5);

        HashMap<String, Integer> map2 = new HashMap<>(map1);
// entrySet() 활용
        for (Map.Entry<String, Integer> stringIntegerEntry : map2.entrySet()) {
            System.out.println("Key: " + stringIntegerEntry.getKey() + ",  Value:" + stringIntegerEntry.getValue());
        }
// Key: Don, Value:2
// Key: Ken, Value:3
// Key: Oksu, Value:5

        for (Map.Entry<String, Integer> stringIntegerEntry : map2.entrySet()) {
            System.out.println("Key: " + stringIntegerEntry.getKey() + ",  Value:" + stringIntegerEntry.getValue());
        }
for (String key : map2.keySet()) {
    System.out.println("Key: "+ key + ", Value: " + map2.get(key));
}
    }
}

오늘 궁금한것

  • HashMap<String,String> map5 = new HashMap<>(10, 0.7f);//초기 capacity,load factor지정

  • Comparator :Tree Set 에 넣어서 쓰는 것 같은데, 잘 모르겠음 ???

  • 그리고, 읽어봤는데 뭔가 어려움

댓글