키를 통해서 값을 참조할 수 있는 구조
메서드 | 설명 |
---|---|
boolean containsKey(Object key) | 해당 키가 있는지 여부 반환 |
boolean containsValue(Object value) | 해당 값이 있는지 여부 반환 |
V get(Object key) | 해당 key와 쌓인 값을 반환 |
boolean isEmpty() | 맵 객체에 요소가 없으면 true 반환 |
Set< Key > keySet() | 키들을 Set 형태로 변환 |
V put(K key, V value) | 키와 값을 요소로 추가 |
V remove(Object key) | 이 키를 가진 요소를 제거 |
int size() | 전체 요소의 개수를 반환 |
Key와 Value 값으로 데이터를 저장하는 형태
따라서 해싱이란 메모리낭비를 최소화하기 위해 저장할 값을 입력 받을 때 연산을 통해 새로운 주소 값을 생성하여 메모리에 저장(매핑, mapping)하는 기법
public static void main(String[] args) {
HashMap<String, String> hm = new HashMap<String,String>();
Scanner sc = new Scanner(System.in);
//1. put(key, value)
hm.put("apple", "사과");
hm.put("paper", "종이");
hm.put("flower", "꽃");
String voca;
System.out.println("알고싶은 단어를 입력하세요: ");
voca=sc.nextLine();
//2. containsKey(key): key가 hashmap에 존재하면 true
if(hm.containsKey(voca)) {
//3. get(key) : value값 반환
System.out.println("해당하는 뜻은: " +hm.get(voca));
}
else {
System.out.println("해당 단어에 대한 뜻은 데이터베이스에 없습니다.");
}
}
}
HashMap을 활용한 사용자 이름과 전화번호를 저장하는 전화번호부 만들기
1. 생성: HashMap 변수명 = new HashMap();
2. 삽입: 변수명.put(key, value)
3. 가져오기: 변수명.get(key)
4. key 존재 확인: 변수명.containsKey(key)
<전화번호부 기능>
1. 고객 저장
2. 고객 검색
3. 전체 보기
4. 끝내기
import java.util.HashMap;
import java.util.Iterator;
import java.util.Scanner;
import java.util.Set;
public class Day02Ex {
static HashMap<String, String> hm = new HashMap<String, String>();
static Scanner sc = new Scanner(System.in);
public static void main(String[] args) {
int choice;
while(true) {
System.out.println("☆★☆★☆★전화번호부☆★☆★☆★");
System.out.println("1. 고객정보 저장");
System.out.println("2. 고객정보 검색");
System.out.println("3. 고객정보 출력");
System.out.println("4. 끝내기");
System.out.print("번호 입력: ");
choice = sc.nextInt();
if(choice==1) {
System.out.println("-------------고객정보 저장-------------");
insert();
}
else if(choice==2) {
System.out.println("-------------고객정보 검색-------------");
search();
}
else if(choice==3) {
System.out.println("-------------고객정보 출력-------------");
show();
}
else if(choice==4) {
System.out.println("프로그램을 종료합니다.");
break;
}
else {
System.out.println("잘못입력하셨습니다.");
}
}
}
// 고객정보 저장
public static void insert() {
String name, phone;
System.out.println("저장할 고객의 이름: ");
name=sc.next();
//name이 key이므로, 중복허용 불가
if(hm.containsKey(name)) {
System.out.println("이미 존재하는 이름입니다.");
return;
}
else {
System.out.println("저장할 고객의 번호: ");
phone=sc.next();
hm.put(name, phone);
System.out.println("저장 완료!");
}
}
// 고객정보 검색
public static void search() {
String searchName;
System.out.println("검색할 이름: ");
searchName=sc.next();
//searchName이 hm에 존재해야 검색 가능
if(hm.containsKey(searchName)) {
System.out.println("검색완료!");
System.out.println("검색된 전화번호: "+hm.get(searchName));
}
else {
System.out.println("검색된 이름이 없습니다.");
}
}
// 고객정보 출력
public static void show() {
Set<String> keyset=hm.keySet();
Iterator i = keyset.iterator();
while(i.hasNext()) {
String curName=(String)i.next();
System.out.println("name: "+curName+", phone: " +hm.get(curName));
}
}
}