* 참고 자료 : 명품 자바 프로그래밍
HashMap<K, V> 컬렉션은 경로명이 java.util.HashMap 이며, 키와 값의 쌍으로 구성되는요소를 다룬다. K는 '키'로 사용할 데이터 타입을, V는 '값'으로 사용할 데이터 타입의 타입매개변수이다.
해시맵의 장단점 ?
- 요소의 삽입, 삭제 시간이 매우 빠르다.
- 요소 검색은 더욱 빠르다.
- 인덱스를 이용하여 요소에 접근할 수 없고 오직 '키'로만 검색해야한다.
- HashMap<K, V>의 주요 메소드
메소드 | 설명 |
void clear() | 해시맵의 모든 요소 삭제 |
boolean containsKey(Object key) | 지정된 키를 포함하고 있으면 true 리턴 |
boolean contiansValue(Object Value) | 지정된 값에 일치하는 키가 있으면 true 리턴 |
V get(Object Key) | 지정된 키의 값 리턴, 키가 없으면 null 리턴 |
boolean isEmpty() | 해시맵이 비어 있으면 true 리턴 |
Set<K> keySet() | 해시맵의 모든 키를 담은 Set<K> 컬렉션 리턴 |
V put(K key, V value) | key와 value 쌍을 해시맵에 저장 |
V remove(Object key) | 지정된 키를 찾아 키와 값 모두 삭제 |
int size() | HashMap에 포함된 요소의 개수 리턴 |
1. 해시맵 생성
해시맵은 HashMap<K, V>에서 K에는 '키'로 V에는 '값'으로 사용할 구체적인 타입을 지정하여 생성한다. 다음은 (영어, 한글) 단어 사전을 만들기 위해 K와 V를 모두 String 타입으로 지정한 사례이다.
* 요소들은 해시맵에 삽입된 순서로 저장되지 않는다.
HashMap<String, String> h = new HashMap<String, String>();
-> HashMap<String, String> h = new HashMap<>();
2. 해시맵에 요소 삽입 (put)
요소를 삽입할 때는 put() 메소드에 키와 값을 전달한다.
h.put("baby", "아기");
h.put("love", "사랑");
h.put("apple", "사과");
3. 키로 값읽기 (get)
다음과 같이 get() 메소드에 키를 전달하면, 값을 얻을 수 있다.
String kor1 = h.get("love"); // kor1 = "사랑"
만일 해시맵에 없는 key를 호출한다면 ?
null을 리턴한다.
4. 키로 요소 삭제 (remove)
h.remove("apple"); // put("apple", "사과")로 삽입한 요소 삭제
5. 요소 개수 알아내기 (size)
int n = h.size(); // 현재 h 내에 있는 요소의 개수 리턴
6. 해시맵의 전체 검색 (keySet, Iterator)
해시맵의 모든 키를 알아낸 후, 각 키에 대해 하나씩 값을 알아내는 방식이다. 해시맵의 keySet()메소드는 모든 키를 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 + ")" );
}
- HashMap 활용 예시 코드
- HashMap을 이용하여 (영어, 한글) 단어 쌍의 저장 검색
(영어, 한글) 단어를 쌍으로 해시맵에 저장하고 영어로 한글을 검색하는 프로그램을 작성하라.
"exit"이 입력되면 프로그램을 종료한다.
package Chapter7;
import java.util.*;
public class HashMapDicEx {
public static void main(String [] args) {
HashMap<String, String> dic = new HashMap<>(); // 해시맵 생성
//3개의 키와 값 쌍을 dic에 저장
dic.put("baby", "사랑");
dic.put("love", "사랑");
dic.put("apple", "사과");
// 사용자로부터 영어 단어를 입력받고 한글 단어 검색. "exit"를 입력받으면 종료
Scanner sc = new Scanner(System.in);
while(true) {
System.out.print("찾고 싶은 단어는? ");
String eng = sc.next();
if(eng.equals("exit")) {
System.out.println("종료합니다...");
break;
}
// 해시맵에서 키 eng의 값 kor 검색
String kor = dic.get(eng);
if(kor==null)
System.out.println(eng+"는 없는 단어 입니다.");
else
System.out.println(kor);
}
sc.close();
}
}
출력 결과 :
- 해시맵에 객체 저장, 학생 정보 관리
id와 tel로 구성되는 Student 클래스를 만들고, 이름을 키로 하고 Student 객체를 값으로 하는 해시맵을 작성하라.
package Chapter7;
import java.util.*;
class Student {
private int id;
private String tel;
public Student(int id, String tel) {
this.id = id; this.tel = tel;
}
public int getId() { return id; }
public String getTel() { return tel; }
}
public class HashMapStudentEx {
public static void main(String [] args) {
HashMap<String, Student> map = new HashMap<>();
map.put("황기태", new Student(1, "010-1111-1111"));
map.put("이재문", new Student(2, "010-2222-2222"));
map.put("김남윤", new Student(3, "010-3333-3333"));
Scanner sc = new Scanner(System.in);
while(true) {
System.out.print("검색할 이름? ");
String name = sc.nextLine();
if(name.equals("exit"))
break;
Student student = map.get(name);
if(student == null)
System.out.println(name + "은 없는 사람입니다.");
else
System.out.println("id: " + student.getId() +", 전화: " +student.getTel());
}
sc.close();
}
}
출력 결과 :
'자바 > 자바 개념' 카테고리의 다른 글
[자바 문법] 자꾸 까먹는 문법 정리 (상시 업데이트) (0) | 2022.08.16 |
---|---|
[Java] Iterator<E> / 2021.12.31 (0) | 2021.12.31 |
[Java] Vector<E> / 2021.12.29 (0) | 2021.12.29 |
[Java] 제네릭과 컬렉션의 개념 / 2021.12.29 (0) | 2021.12.29 |
[Java] String 클래스 / 2021.11.21 (0) | 2021.11.21 |