[Java/컬렉션/자료구조] HashMap

SHark·2023년 9월 22일
0

알고리즘

목록 보기
20/20

key-value 구조로 자료를 저장하고 싶을 때 혹은 알고리즘에서는 탐색을 잘하기 위해서 자료를 이쁘게 저장하고 싶을 때 많이쓴다.

HashMap<key,Value>

  • Key도 객체, Value도 객체. Entry객체를 저장하는 구조를 가지고 있는 자료구조
  • 값은 중복 저장 가능, 키는 중복저장 x
    • 만약, 기존 저장된 키와 동일한 키로 값을 저장하면, 기존의 값은 없어지고 새로운 값으로 바뀜.
  • HashMap 구현체이므로, 접근하는데 O(1)
  • 저장공간이 부족하면, 2배씩 늘림.

HashMap의 선언

  1. import java.util.HashMap
  2. HashMap<T,T> 변수명 = new HashMap<T,T>(capacity);

import java.util.HashMap;

HashMap<String,String> map1 = new HashMap<String,String>(); //HashMap생성

HashMap 값 추가

  • put을 이용한다.
  • map.put(key,value)
  • 기존에 키가 있다면, 해당 value값으로 덮어진다. 키가 없으면 키 값을 생성해서 값을 저장한다.
HashMap<Integer,String> map = new HashMap<>();

map.put(1,"Banana");
map.put(2,"Orange");
map.put(3,"Apple");

HashMap 값 삭제

  • remove를 이용한다.
  • map.remove(key) : 해당 key의 value 삭
  • map.clear() : 모든 데이터 삭제.

HashMap 값 접근

  • get(key) : 해당 key로 접근
HashMap<Integer,String> map = new HashMap<>();

map.put(1,"Banana");
map.put(2,"Orange");
map.put(3,"Apple");

map.get(1) // Banana
map.get(2) //Orange
map.get(4)//error

HashMap의 탐색

  • entrySet() - Key-value 값을 가져올 때, 사용하는 세트
//key와 value를 가지는 Set객체를 반환

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

map.put(1,"Banana");
map.put(2,"Orange");
map.put(3,"Apple");

for(Entry<Integer,String> entrySet: map.entrySet()){
	System.out.println(entrySet.getKey() + " " + entrySet.getValue());
}
  • KeySet() : 키만 반환

  • Iterator 인터페이스 : 자바 컬렉션에 저장되어있는 요소들은 순회하는 인터페이스.

    • 장점: 모든 컬렉션을 공통적인 방법으로 순회할 수 있다.
    • iterator인터페이스가 구현되기전, 각각의 컬렉션마다 접근방법이 있기 때문에 그걸 안다면 굳이 안해도 되지만, iterator로 wrapping해서 다룰 수도 있다는건 알아두자.
HashMap<Integer,String> map = new HashMap<>();

map.put(1,"Banana");
map.put(2,"Orange");
map.put(3,"Apple");

Iterator<Map.Entry<Integer,String>> iter = map.entrySet().iterator();

while(iter.hasNext()){
	Map.Entry<Integer,String> entrySet = (Map.Entry<Integer,String>)iter.next();
	int key = entrySet.getKey();
	String value = entry.getValue();
}

참고)Integer 객체를 int로 바꾸는 방법

  • = 연산자 이용
  • intValue() 이용
  • parseInt() 이용

0개의 댓글