Map이란?

  • Map은 리스트나 배열처럼 순차적으로(sequential) 해당 요소 값을 구하지 않고 key를 통해 value를 얻는다.
  • 맵(Map)의 가장 큰 특징이라면 key로 value를 얻어낸다는 점이다. 
  • List와 달리, Map에는 순서가 없다.

 

 

HashMap이란?

  • HashMap은 Map을 구현한다. key와 value를 묶어 하나의 entry로 저장한다는 특징을 갖는다.
  • 해시 알고리즘(hash algorithm)을 사용하여 많은 양의 데이터를 검색하는데 검색 속도가 매우 빠르다.
  • key, value의 쌍으로 관리하므로, Iteration 객체를 사용하지 않고 해당 key에서 데이터의 값을 바로 추출할 수 있다.
  • value에 null값도 사용 가능하다.(즉, null 을 가지는 key 는 2개일 수 없다)
  • 유사한 성격의 클래스로는 HashTable, TreeMap 등이 있다.
  • 멀티쓰레드에서는 HashTable을 사용한다.

 

 

 

HashMap <k,v> 주요 메소드

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() 해당 맵의 매핑의 총 개수를 반환함.

 

 

예제로 보는 사용법

HashMap 생성

Map<"key의 데이터타입", value의 데이터입> 변수명 = new HashMap(); 으로 생성

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

or

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

 

 

put()

put(키,값) 으로 MapCollection에 저장된다.

map.put("짱구", 200);
map.put("철수", 400);

 

 

get()

get(키) 으로 해당 키값을 꺼낼 수 있다.

// {철수=400, 짱구=200},  200,  400
System.out.println(map);
System.out.println(map.get("짱구"));
System.out.println(map.get("철수"));

 

 

 

containsKey()

containsKey(키) 메소드는 해당 키에 철수가 있는지 확인하는 메소드다

// true
System.out.println(map.containsKey("철수"));

 

 

remove()

remove(키) 해당 키를 삭제하는 메소드다.

// false
map.put("유리", 400);
map.remove("유리");
System.out.println(map.containsKey("유리"));

 

 

 

putAll()

putAll(new HashMap())  ->  putAll() 은 같은 데이터타입을 가진 다른 Map을 전부 포함하게 된다.

Map<String, Integer> newMap = new HashMap();

//1 {철수=400, 짱구=200}
newMap.putAll(map);
System.out.println(newMap);

 

 

Foreach() 

Map은 Foreach() 메소드를 이용하여 순환하면서 키-값 을 꺼낼 수 있다.

/*  2  key = 철수 value = 400,   key = 짱구 value = 200 */
newMap.forEach((key,value) -> System.out.println("key = " + key + " value = " + value));

 

 

keySet() 

 Map은 index가 없지만 ketSet()를 이용하면 key를 set으로 넘겨주어 Map에 존재하는 키를 모두 순회할 수 있다.

//3  철수  짱구
for (String key : newMap.keySet()){
    System.out.println(key);
}

 

 

중복된 값

중복된 값은 덮어 씌어진다.

// 중복된 값은 덮어진다.   {철수=400, 짱구=400}
newMap.put("짱구", 400);
System.out.println(newMap);

 

전체 예제

package collection.map;

import java.util.*;

public class HashMapExercise {

     public static void main(String[] args) {
         /*
         * 1) Map<"key의 데이터타입", value의 데이터입> 변수명 = new HashMap(); 으로 생성
         * 2) put()  =  put(키,값) 으로 MapCollection에 저장된다.
         * 3) get()  =   get(키) 메소드로 키를 입력하면 값이 나온다.
         * 4) containsKey()   =  containsKey(키) 메소드는 해당 키에 철수가 있는지 확인하는 메소드다
         * 5) remove()   =  remove(키) 해당 키를 삭제하는 메소드다.
         * */

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

         //2
         map.put("짱구", 200);
         map.put("철수", 400);


         //3  {철수=400, 짱구=200},  200,  400
         System.out.println(map);
         System.out.println(map.get("짱구"));
         System.out.println(map.get("철수"));

         //4  true
         System.out.println(map.containsKey("철수"));


         // false
         map.put("유리", 400);
         map.remove("유리");
         System.out.println(map.containsKey("유리"));


        /*
        * 1) putAll()   = putAll(new HashMap())  ->  putAll() 은 같은 데이터타입을 가진 다른 Map을 전부 포함하게 된다.
        * 2) Foreach()  = Map은 Foreach() 메소드를 이용하여 순환하면서 키-값 을 꺼낼 수 있다.
        * 3) keySet()   = Map은 index가 없지만 ketSet()를 이용하면 key를 set으로 넘겨주어 Map에 존재하는 키를 모두 순회할 수 있다.
        * */
         Map<String, Integer> newMap = new HashMap();

         //1 {철수=400, 짱구=200}
         newMap.putAll(map);
         System.out.println(newMap);

         // 2  key = 철수 value = 400,   key = 짱구 value = 200
         newMap.forEach((key,value) -> System.out.println("key = " + key + " value = " + value));


         //3  철수  짱구
         for (String key : newMap.keySet()){
             System.out.println(key);
         }

         // 중복된 값은 덮어진다.   {철수=400, 짱구=400}
         newMap.put("짱구", 400);
         System.out.println(newMap);

    }
}

 

 

 

전체 코드

 

GitHub - whitewise95/java_dataStructure_and_collection: 자바와 자료구조 그리고 콜렉션 등을 연습하는 소스입

자바와 자료구조 그리고 콜렉션 등을 연습하는 소스입니다. Contribute to whitewise95/java_dataStructure_and_collection development by creating an account on GitHub.

github.com

 

복사했습니다!