본문 바로가기
프로그래밍 언어/Java

[Java] Map 인터페이스를 구현한 HashMap

by 까망 하르방 2021. 3. 2.
반응형

HashMap 

Hashtable은 JDK1.0 버전에서 처음으로 등장하며, 

Vector와 마찬가지로 멀티스레드 안에서 안정성을 보장했지만,

속도가 느려서 JDK1.2 버전 부터는 HashMap이라는 것으로 대체되었다.

 

특징

- key 와 값value 구조

  ▷ List와 같이 선형 탐색보다는 속도측면에서 효율적.

  ▷ 인덱스를 통한 선형탐색이 아니기에 순서에 대한 의미가 없다.

- 중복 허용 X 

  ▷ 기존에 값이 존재한다면 덮어씌우는 형태.

 

[예제 코드]

put(), get() 메소드를 활용해 데이터를 삽입하고 조회한다.

요소 삭제는 remove(키) / 요소 개수는 size()이용

import java.util.HashMap;

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

        // 자료 구조이므로 key: value 값 타입 모두 객체 자료형이다.
        HashMap<Integer, String> map = new HashMap<>();
        
        for(int i=0; i<5; i++) {
            map.put(i, "value " + i);
        }
        System.out.println(map);
        
        // key=0에 대한 value 값을 새로운 값으로 갱신
        map.put(0, "modified value");
        System.out.println(map);
        
        String data = map.get(0);
        System.out.println("data: " + data);
    }
}

 

[예제 코드]

- HashMap 값 존재 여부 확인

import java.util.*;

public class Main {
    public static void main(String[] args) {
        HashMap<String, String> map = new HashMap<>();
        // Map에 데이터 추가
        map.put("harbang", "jeju");
        
        // key 확인
        if(map.containsKey("harbang")) {
            System.out.println("Key 존재!");
        }
        // value 확인
        System.out.println(map.containsValue("jeju"));
    }
}

 

HashMap 순회

Iterator 이용

- 데이터를 알아내려면 별도의 key 집합 이용.

- HashMap은 그 안에 있는 key를 Set 구조로 저장하고 있기 때문.

※ Set: 데이터 중복 X, 순서 X

import java.util.*;
public class Main {
    public static void main(String[] args) {
        HashMap<String, Integer> map = new HashMap<String,  Integer>();
        
        // Map에 데이터 추가
        map.put("one", 1); map.put("two", 2);
        map.put("three", 3); map.put("four", 4);
        
        // Set & Iterator 이용        
        Set<String> ketSet = map.keySet();
        Iterator<String> it = ketSet.iterator();
        while(it.hasNext()) {
            String key = it.next();
            System.out.println("(" + key + ", " + map.get(key) +  ")");
        }
    }
}

 

 

반응형

댓글