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 주요 메소드
해시맵 장단점
- 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 |