본문 바로가기
안 씀/java-개념

HashMap<K, V> 클래스

by unhyepnhj 2024. 6. 9.

HashMap<K, V>

- java.util.HashMap

- '키(key)'와 '값(value)'의 쌍으로 구성되는 요소를 다루는 컬렉션

- K에는 '키'로 사용할 데이터 타입, V에는 '값'으로 사용할 데이터 타입 지정

- 키와 값이 한 쌍으로 삽입

- 키는 해시맵에 삽입되는 위치 결정에 사용

- 값을 검색하기 위해서 키 이용

HashMap<String, String> h = new HashMap<String, String>();
//키와 값이 모두 String 타입인 해시맵 생성
h.put("apple", "사과");	//"apple" 키와 "사과" 값의 쌍을 h에 삽입
String kor = h.get("apple");
//"apple" 키로 값 검색하여 검색된 값인 "사과"를 kor에 저장

- put(key, value) 메소드는 키와 값을 받아 키를 이용하여 해시 함수를 실행하고 해시 함수가 리턴하는 위치에 키와 값을 저장

- get(key) 메소드는 다시 키를 이용하여 동일한 해시 함수를 실행하고 값이 저장된 위치를 알아내 값을 리턴

 

- 해시맵은 해시 함수를 통해 키와 값이 저장되는 위치를 결정

- 사용자는 그 위치를 알 수 없음

- 삽입 순서와 위치 무관

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

HashMap<String, String> 내부 구성과 put(), get() 메소드

 

HashMap 주요 메소드


해시맵 장단점

- List<E>를 상속받은 Vector<E>나 ArrayList<E>와 차이점 존재

 

1. 요소의 삽입, 삭제 시간이 빠름(pros)

- 요소의 위치를 결정하는 해시 함수가 간단한 코드로 이루어짐

- Vector<E>나 ArrayList<E>와 달리 요소의 삽입, 삭제 시 다른 요소들의 위치 이동 불필요

 

2. 요소 검색이 빠름(pros)

- 해시맵 get(key) 메소드가 호출되면 해시 함수가 key의 저장 위치를 바로 찾아냄

- Vector<E>나 ArrayList<E>에서처럼 모든 요소들을 하나씩 비교할 필요 없음

 

3. 인덱스를 이용하여 요소에 접근할 수 없음(cons)

- 오직 key로만 검색해야 함


해시맵 생성

- HashMap<K, V>에서 K에는 '키'로, V에는 '값'으로 사용할 구체적인 타입을 지정하여 생성

HashMap<String, String> h = new HashMap<String, String>();
//(영어, 한글) 단어 사전을 만들기 위해 K와 V를 모두 String 타입으로 지정
HashMap<String, String> h = new HashMap<>();	//Java 7부터 간략히 가능
var h = new HashMap<String, String>();		//Java 10부터 간략히 가능

 

해시맵에 요소 삽입

- put() 메소드에 key와 value를 전달해 요소 삽입 

h.put("baby", "아기");
h.put("love", "사랑");
h.put("apple", "사과");

 

key로 value 읽기 

- get() 메소드에 key를 전달하면 value를 얻을 수 있음

String kor1 = h.get("love");	//kor1="사랑"

- 해시맵에 없는 key로 get()을 호출하면 null 리턴

 

key로 요소 삭제

- remove() 메소드 이용

h.remove("apple");	//put("apple", "사과")로 삽입한 요소 삭제

 

요소 개수 알아내기

- size() 메소드 이용

int n = h.size();	// 현재 h에 있는 요소의 개수 리턴

 

해시맵 전체 검색

- keySet() 메소드 이용

- 해시맵의 모든 key를 알아낸 후 각 key에 대해 하나씩 value를 알아내는 방식으로 작성

- keySet() 메소드는 모든 ket를 Set 컬렉션으로 만들어 리턴

Set<String> keys = h.keySet();	//해시맵 h에 있는 모든 키를 Set 컬렉션으로 리턴
Iterator<String> it = keys.iterator();	//Set의 각 문자열을 순차 검색하는 Iterator 리턴
while(it.hasNext()){
	String key = it.next();	//키
    String value = h.get(key);	//값
    System.out.println("("+key+", "+value")");
}


예제 7-5 (영어, 한글) 단어를 쌍으로 해시맵에 저장하고 영어로 한글을 검색하는 프로그램 작성

  • ("baby", "아기"), ("love", "사랑"), ("apple", "사과") 를 저장
  • "exit"이 입력되면 프로그램 종료

 

예제 7-6 해시맵을 이용하여 학생의 이름과 자바 점수를 기록 관리하는 프로그램 작성

  • 이름은 String, 점수는 정수
  • 학생 5명의 이름과 점수 값을 저장
  • HashMap 요소 개수, 모든 (k, v) 쌍 출력

 

예제 7-7 id와 tel로 구성되는 Student 클래스를 만들고, 이름을 key로 하고 Student 객체를 value로 하는 해시맵 작성

'안 씀 > java-개념' 카테고리의 다른 글

제네릭 만들기  (0) 2024.06.10
LinkedList<E> 클래스  (0) 2024.06.10
Iterator<E> 인터페이스  (0) 2024.06.09
ArrayList<E>  (0) 2024.06.09
Vector<E>  (0) 2024.06.08