HashMap

류기탁·2021년 12월 23일
0

Java

목록 보기
4/5

HashMap

1. HashMap이란

가. 개요

  • HashMap은 Map 인터페이스를 구현한 대표적인 Map 컬렉션이다.
  • Map 인터페이스를 상속한다.
  • Map의 성질을 그대로 가진다.
  • 코딩테스트 할 때 종종 쓸 일이 있을 것이다.

나. 구조

  • 키(key)와 값(value)의 쌍으로 구성된 Entry객체를 저장하는 구조를 가지고 있다.

다. 특징

  • 키와 값에 null이 가능하다.
  • 데이터의 순서가 없다.
  • 중복된 key는 불가.
  • 중복된 value는 가능.
  • 해싱을 사용하기 때문에 데이터 검색할 때 뛰어난 성능을 보인다.

2. HashMap 사용하기

가. 선언(생성자)

  • 키와 값의 타입을 파라미터로 기본생성자를 호출한다.
  • 해시맵은 List와 달리 저장공간을 두배로 늘린다.
  • 그렇기 때문에, 총 데이터 개수를 알고있다면, Map의 초기용량을 지정해주는 것이 좋다.
HashMap<String,String> map1 = new HashMap<String,String>();//HashMap생성
HashMap<String,String> map2 = new HashMap<>();//new에서 타입 파라미터 생략가능
HashMap<String,String> map3 = new HashMap<>(map1);//map1의 모든 값을 가진 HashMap생성
HashMap<String,String> map4 = new HashMap<>(10);//초기 용량(capacity)지정
HashMap<String,String> map5 = new HashMap<>(10, 0.7f);//초기 capacity,load factor지정
HashMap<String,String> map6 = new HashMap<String,String>(){{//초기값 지정
    put("a","b");
}};

나. 삽입

  • put()은 인자로 key value를 받는다.
  • putAll() 은 인자로 전달된 모든 데이터를 저장한다.
Map<String, Integer> fruits = new HashMap<>();
fruits.put("apple", 1);
fruits.put("banana", 2);
fruits.put("kiwi", 3);
fruits.put(null, 4);
fruits.put("kiwi", 5);
System.out.println("fruits: " + fruits);

다. 출력

  • get() : value가 필요한 경우 키에 해당하는 value를 리턴
  • getOrDefault(Object key, V DefaultValue)

    key : 값을 가져와야 하는 요소의 키
    defaultValue : 지정된 키로 매핑된 값이 없는 경우 반환

fruits.get("키값")
  • values() : hashMap에 저장된 value들을 Collection 객체로 리턴
Collection<Integer> values = fruits.values();
  • entrySet() :key와 value가 모두 필요한 경우
  • 많은 양을 가져오려면 성능이 저하가 되기 때문에 entrySet을 사용하자.
for (Entry<Integer, String> entry : map.entrySet()) {
    System.out.println("[Key]:" + entry.getKey() + " 
    }
  • keySet() : 키값이 필요한 경우, Set 객체로 리턴
Set<String> keys = fruits.keySet();

라. 삭제

  • remove() : key에 해당하는 데이터를 삭제하기 / value리턴한다.
Map<String, Integer> fruits = new HashMap<>();
fruits.put("apple", 1);
fruits.put("banana", 2);
fruits.put("kiwi", 3);

System.out.println("remove(apple): " + fruits.remove("apple"));
System.out.println("remove(kiwi): " + fruits.remove("kiwi"));
System.out.println("remove(undefined): " + fruits.remove("undefined"));
System.out.println("fruits: " + fruits);
  • clear() : 모든 데이터 삭제
  • isEmpty() : 비어있는지 확인

마. 값이 존재하는지 확인하ㅣ

  • containsKey() : key가 존재하는가?
  • containsValue() : value가 존재하는가?
System.out.println("containsKey(apple): " + fruits.containsKey("apple"));
System.out.println("containsKey(undefined): " + fruits.containsKey("undefined"));
System.out.println("containsValue(1): " + fruits.containsValue(1));
System.out.println("containsValue(0): " + fruits.containsValue(0));

바. 교체

  • replace() : key의 value를 교체한다.
  • put() 도 key가 중복이면 자동으로 교체한다.
System.out.println("replace(apple, 10): "  + fruits.replace("apple", 10));
System.out.println("replace(undefined, 10): "  + fruits.replace("undefined", 10));
System.out.println("fruits: " + fruits);
  • replace(K key, V oldValue, V newValue) : oldValue가 동일할 때만 교체한다.
profile
오늘도 행복한 하루!

0개의 댓글