반응형

 

자바 - HashMap 사용방법 (개념, 특징, 메소드 및 예제)

 

 

컬렉션의 하나로 데이터를 키(Key)와 밸류(Value)의 짝으로 저장하는 HashMap에 대해서 알아보도록 하겠습니다.

 

 

   목차

  1. HashMap이란?
  2. HashMap 생성방법
  3. HashMap 메서드
    • 데이터 추가 / 삭제 / 수정 / 확인 / 반환
  4. HashMap 사용예제

 

 

1. HashMap이란?

 

HashMap데이터를 저장할 때 키(Key)와 밸류(Value)가 짝을 이루어 저장됩니다. 데이터를 저장할 때는 키(Key) 값으로 해시함수를 실행한 결과를 통해 저장위치를 결정합니다. 따라서 HashMap은 특정 데이터의 저장위치를 해시함수를 통해 바로 알 수 있기 때문에 데이터의 추가, 삭제, 특히 검색이 빠르다는 장점이 있습니다. 

이러한 이유로 HashMap은 키(Key)값을 통해서만 검색이 가능하며, HashMap의 키(Key) 값은 중복될 수 없고, 밸류(Value) 값은 키(Key) 값이 다르다면 중복이 가능합니다. 

 

 

 

2. HashMap 생성방법

  • (방법1) HashMap<String, String> h1 = new HashMap<String, String>( );         // 기본 capacity:16, load factor:0.75
  • (방법2) HashMap<StringString> h2 = new HashMap<StringString>(20);       // capacity:20으로 설정
  • (방법3) HashMap<StringString> h3 = new HashMap<StringString>(20, 0.8); // capacity:20, load factor:0.8로 설정
  • (방법4) HashMap<StringString> h4 = new HashMap<StringString>(h1);      // 다른 Map(h1)의 데이터로 초기화

cf) capacity는 데이터 저장 용량, load factor는 데이터 저장공간을 추가로 확보해야 하는 시점을 지정합니다. load factor 0.8 은 저장공간이 80% 채워져 있을 경우 추가로 저장공간을 확보합니다. 

 

 

 

3. HashMap 메서드

 

1) 데이터 추가

  1. V put(K key, V value) : key와 value를 저장합니다. 
  2. void putAll(Map<? extends K, ? extends V> m) : Map m의 데이터를 전부 저장합니다.
  3. V putIfAbsent(K key, V value) : 기존 데이터에 key가 없으면  key와 value를 저장합니다. 

 

2) 데이터 삭제

  1. void clear( ) : 모든 데이터를 삭제합니다. 
  2. V remove(Object key) : key와 일치하는 기존 데이터( key와 value)를 삭제합니다. 
  3. boolean remove(Object key, Object value) : key와 value가 동시에 일치하는 데이터를 삭제합니다. 

 

3) 데이터 수정

  1. V replace(K key, V value) : key와 일치하는 기존 데이터의 value를 변경합니다. 
  2. V replace(K key, V oldValueV newValue) : key와 oldValue가 동시에 일치하는 데이터의 value를 newValue로 변경합니다. 

 

4) 데이터 확인

  1. boolean containsKey(Object key) : key와 일치하는 데이터가 있는지 여부를 반환합니다. (있으면 true)
  2. boolean containsValue(Object value) : value가 일치하는 데이터가 있는지 여부를 반환합니다. (있으면 true)
  3. boolean isEmpty( ) : 데이터가 빈 상태인지 여부를 반환합니다. (빈 상태면 true)
  4. int size( ) : key-value 맵핑 데이터의 개수를 반환합니다. 

 

5) 데이터 반환

  1. V get(Object key) : key와 맵핑된 value값을 반환합니다. 
  2. V getOrDefault(Object key, V defaultValue) : key와 맵핑된 value값을 반환하고 없으면 defaultValue값을 반환합니다.
  3. Set<Map.Entry<K, V>> entrySet( ) : 모든 key-value 맵핑 데이터를 가진 Set 데이터를 반환합니다. 
  4. Set<K> keySet( ) : 모든 key 값을 가진 Set 데이터를 반환합니다. 
  5. Collection<V> values( ) : 모든 value 값을 가진 Collection 데이터를 반환합니다. 

 

 

 

4. HashMap 사용예제

 

1) HashMap 생성 및 실행

public class HelloWorld {
	public static void main(String[] args) {
		HashMap<String, String> h1 = new HashMap<String, String>();
		HashMap<String, String> h2 = new HashMap<String, String>();
		
		h1.put("aaa", "1111");
		h1.put("bbb", "2222");
		h1.put("ccc", "3333");
		h1.putIfAbsent("aaa", "0000");
		h1.putIfAbsent("ddd", "4444");
		h2.putAll(h1);
		System.out.println("h1 : " + h1);
		System.out.println("h2 : " + h2);
		
		System.out.println("[1]: " + h1.containsKey("aaa"));
		System.out.println("[2]: " + h1.containsValue("1111"));
		System.out.println("[3]: " + h1.isEmpty());
		System.out.println("[4]: " + h1.size());
		System.out.println("[5]: " + h1);
		System.out.println("[6]: " + h1.remove("aaa", "1111"));
		System.out.println("[7]: " + h1.put("bbb", "0000"));
		System.out.println("[8]: " + h1.replace("ccc", "0000"));
		System.out.println("h1 : " + h1);
		System.out.println("h2 : " + h2);
				
		
		for (String key: h1.keySet()) {
			String value = h1.get(key);
			System.out.println("Key:" + key + ", Value:" + value);	
		}
	}
}

 

2) 실행결과

h1 : {aaa=1111, ccc=3333, bbb=2222, ddd=4444}
h2 : {aaa=1111, ccc=3333, bbb=2222, ddd=4444}
[1]: true
[2]: true
[3]: false
[4]: 4
[5]: {aaa=1111, ccc=3333, bbb=2222, ddd=4444}
[6]: true
[7]: 2222
[8]: 3333
h1 : {ccc=0000, bbb=0000, ddd=4444}
h2 : {aaa=1111, ccc=3333, bbb=2222, ddd=4444}
Key:ccc, Value:0000
Key:bbb, Value:0000
Key:ddd, Value:4444

 

반응형

+ Recent posts