Programming/Java

[Java] Map 인터페이스의 정의, Map 과 HaspMap 차이점?

joah.k 2022. 3. 26. 02:44
728x90

Map 인터페이스 

- Map 은 key(키)-value(값) 형태를 쌍으로 묶어 데이터를 저장하는 데 사용되는 인터페이스이다. 

- 여기서 키(key)란 실질적인 값(value)을 찾기 위한 이름의 역할을 한다.

- pair 형태의 객체를 관리하는 데 필요한 메서드들이 정의되어 있다. 

(여기서 키는 중복될 수 없고, 값은 중복되더라도 최근에 저장된 값이 최종으로 남는다. )

- Map 인터페이스를 구현한 클래스로는 LinkedHashMap, HashMap, SortedMap, TreeMap, HashTable 이 있다. 

 

  • HashMap
    • 해시 알고리즘를 이용한 Map
    • 삽입 / 삭제 / 조회 연산의 O(1)을 보장하는 아주 빠른 자료구조
    • 삽입 데이터의 순서를 보장하지 않음
    • 정렬 불가

  • LinkedHashMap
    • 삽입 / 삭제가 Map 보다 느림
    • 삽입 순서 보장
    • 정렬은 불가함
  • TreeMap
    • 삽입 / 삭제가 굉장히 느림
    • 삽입순서 보장
    • Map이지만 유일하게 정렬이 가능

>>  용도에 따라 class 사용 

   - 가장 널리 쓰이는 것은 HashMap이지만 데이터 정렬이 필요하면 TreeMap, 삽입 순서를 기억해야 한다면 LinkedHashMap.. 이런 식으로 사용하면 된다. 

 

Map 인터페이스와  HashMap의 차이점 

- HashMap은 Map 인터페이스를 구현한 클래스이다. 

- Map 인터페이스를 구현한 클래스 중 HashMap 클래스를 가장 많이 사용한다. 

 

 

Map 인터페이스 사용법 

Map 인터페이스만으로는 데이터를 보유할 수 없지만, 해당 클래스의 객체를 생성한 다음 Map 참조를 사용하여 객체를 보유할 수 있다.

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

public class Hash_prctice {
    public static void main(String[] args) {
        Map<String, Integer> map = new HashMap<>();
        // HashMap 클래스를 사용하여 데이터를 저장
        map.put("하나",1);
        map.put("둘",2);
        map.put("셋",3);
        System.out.println(map);
    }
}



* Map 선언시

Map<String, String> map= new HashMap<>();

HashMap<String, Object> map2= new HashMap<>();  

둘 다 표현 가능

인터페이스는 선언만 가능, 객체 생성이 불가능하기 때문에 자식인 HashMap으로 객체를 생성한다.

HashMap은 본인의 메소드 외에 부모인Map의 메소드들을 강제 상속받는다.

 

 

Map 인터페이스의 주요 메서드 

 

- put(K key, V value) : Map에 자료 삽입 (key는 중복 허용 X, 중복된 key  값을 put 할 경우 값이 대체됨) 

Map<String, Integer> map = new HashMap<>(); map.put("하나", 1);
Map<String, Integer> map = new HashMap<>(); map.put("둘", 2);
Map<String, Integer> map = new HashMap<>(); map.put("하나", 11);

// console >> {둘=2, 하나=11}

 

- putIfAbsent(K key, V value) : Map에 key가 존재하지 않을 때만 value 값을 넣어줌 

        Map<String, Integer> map = new HashMap<>();
        map.put("하나",1);
        map.put("둘",2);
        map.put("셋",3);
        System.out.println(map); 
        // {둘=2, 하나=1, 셋=3}
	

        map.putIfAbsent("가나다", 2521); // '가나다'는 없는 key 값이기에 추가됨
        System.out.println(map);
        // {가나다=2521, 둘=2, 하나=1, 셋=3}

 

- computeIfAbsent 도 같은 개념이나, value 값에 함수형 인터페이스 Function이 들어간다.

- 반대 개념은 computeIfPresent (key가 존재하는 경우에 사용)

 

- getOrDefault(K key, V value) : key가 존재하면 value를 반환하고, key가 존재하지 않으면 지정한 Default값을 반환한다.

 

void clear() 해당 맵(map)의 모든 매핑(mapping)을 제거함.
boolean containsKey(Object key) 해당 맵이 전달된 키를 포함하고 있는지를 확인함.
boolean containsValue(Object value) 해당 맵이 전달된 값에 해당하는 하나 이상의 키를 포함하고 있는지를 확인함.
V get(Object key) 해당 맵에서 전달된 키에 대응하는 값을 반환함.
만약 해당 맵이 전달된 키를 포함한 매핑을 포함하고 있지 않으면 null을 반환함.
boolean isEmpty() 해당 맵이 비어있는지를 확인함.
Set<K> keySet() 해당 맵에 포함되어 있는 모든 키로 만들어진 Set 객체를 반환함.
V put(K key, V value) 해당 맵에 전달된 키에 대응하는 값으로 특정 값을 매핑함.
V remove(Object key) 해당 맵에서 전달된 키에 대응하는 매핑을 제거함.
boolean remove(Object key, Object value) 해당 맵에서 특정 값에 대응하는 특정 키의 매핑을 제거함.
V replace(K key, V value) 해당 맵에서 전달된 키에 대응하는 값을 특정 값으로 대체함.
boolean replace(K key, V oldValue, V newValue) 해당 맵에서 특정 값에 대응하는 전달된 키의 값을 새로운 값으로 대체함.
int size() 해당 맵의 매핑의 총 개수를 반환함.
728x90