첫 번째 줄에는 전화번호부의 항목수를 나타내는 정수 n이 입력된다.
각 항목은 이름과 전화번호 두줄로 구성된다.
사람 이름은 소문자로만 구성된다. 전화번호는 0으로 시작하지 않는 8자리 숫자다.
전화번호부에 항목이 없으면 "Not Found"출력. 있으면 이름과 전화번호 출력
자바 맵은 대응관계를 쉽게 표현할 수 있게 해주는 자료형이다.
Associative array, Hash라고도 불린다. Key-Value값을 쌍으로 갖는다.
맵의 가장 큰 특징은 바로 이 쌍인데, 순차적으로 element값을 구하는 리스트나 배열과 달리
key 값으로 value를 얻는다는 것이다.
인터페이스 Map을 구현한 자료형은 HashMap, LinkedHashMap, TreeMap등이 있다.
그 중에서 HashMap이 가장 간단한 구조다.(해시 함수를 사용해 데이터를 해시 테이블에 저장, 검색하는
해싱 기법을 사용해 많은 양의 데이터 중에서 빠르게 원하는 데이터를 가져올 수 있다고 한다.)
1.put
public class HashMap_Test{
public static void main(String[] args) {
HashMap<Integer, String> map = new HashMap<>();
map.put(1, "사과");
map.put(2, "오렌지");
map.put(3, "메론");
System.out.println(map);
}
}
//결과
{1=사과, 2=오렌지, 3=메론}
put(key, value)형태로 값을 입력해준다. value값은 중복이 가능하지만, key값은 중복이 안된다.
만약 중복되면 나중에 선언된 key값의 value가 출력된다.
System.out.println(map.get("people")); // "사람" 출력
이 메소드를 사용하면 value값을 얻을 수 있다. people이라는 key 값에 대응하는 value값인 "사람"이 출력된다.import java.util.HashMap;
import java.util.Map;
public class CheckExistHashMap {
public static void main(String[] args) {
// HashMap 준비
Map<Integer, String> map = new HashMap<Integer, String>();
map.put(1, "Apple");
map.put(2, "Banana");
map.put(3, "Orange");
map.put(null, "Tomato");
// 특정 key값 존재여부 체크 (containsKey())
System.out.println(map.containsKey(1)); // true
System.out.println(map.containsKey(5)); // false
System.out.println(map.containsKey(null)); // true
}
}
이 메소드는 맵에 해당 key가 존재하는지 여부를 확인해준다. 존재하면 true가 리턴된다.
4.remove
System.out.println(map.remove("people")); // "사람" 출력
remove 메소드는 key값에 해당하는 아이템(people:사람)을 삭제하고, 그 value값을 리턴한다.
System.out.println(map.size()); // 1 출력
people, baseball 두 값을 가지고 있었는데, remove로 people이 삭제되었으므로 1이 출력될 것이다.
import java.util.*;
import java.io.*;
public class JavaMap {
public static void main(String []argh) {
Scanner in = new Scanner(System.in);
int n=in.nextInt(); // 입력받는 정수 n은 phoneBook의 항목 수다.
in.nextLine();
HashMap<String, Integer> phoneBook = new HashMap<>(); //이름(String), 전화번호(Integer)항목을 phoneBook이라는 이름으로 해쉬맵을 생성한다.
for(int i=0;i<n;i++){
String name=in.nextLine(); //key값에는 이름이 들어간다.
int phone=in.nextInt(); //value는 전화번호다.
in.nextLine();
phoneBook.put(name, phone); //생성한 해쉬맵에 key는 이름, value는 전화번호를 담는다.
}
while(in.hasNext()){ //boolean 타입으로 반환되는 hasNext()를 사용해 맵에 저장되었는지를 확인한다.
String name=in.nextLine(); // 사람 이름으로 검색했을때
if( !phoneBook.containsKey(name)){ //phoneBook에 해당 key값인 name이 없으면
System.out.println("Not Found"); //Not Found 출력
continue; //while문에서 continue는 조건식으로 이동해 계속한다.
}
System.out.println(name + "=" + phoneBook.get(name)); //만약 boolean타입 true가 반환되면 이름 = (해당 key값 name로 찾은 value인) 번호를 출력해 준다.
}
}
}