티스토리 뷰
저번 게시물에서 ArrayList를 다뤘었다.
오늘은 java.util에 존재하는 또다른 클래스인 HashMap에 대해 알아보자.
[ HashMap ]
- key : value 형태로 데이터를 저장할 수 있다.
- Python의 딕셔너리와 유사하다.
- key의 type은 String으로 가장 많이 사용한다. (Integer을 사용하기도 한다.)
- value의 type은 여러 type을 섞어 담을거면 Object로 지정하면 된다.
주요 메소드
.put(key, value) //원소 삽입
.get(key) //key에 해당하는 value 가져오기
.remove(key) //key에 해당하는 key와 value 삭제하기
.isEmpty() //비어있는지 여부
.clear //모두 삭제
예제를 통해 자세히 알아보자!
"주요 메소드 활용해보기"
예제 1
1. String 타입의 key와 Object 타입의 데이터를 저장할 수 있는 HashMap 객체 생성하고 참조값을 map1이라는 지역 변수에 저장해보자.
Map<String, Object> map1 = new HashMap<>();
2. map1에 정보를 저장해보자.
map1.put("num", 1);
map1.put("name", "김구라");
map1.put("addr", "노량진");
3. 원래 type의 지역변수에 map1의 key에 해당하는 value값 넣기
int num1 = (int)map1.get("num");
String name1 = (String)map1.get("name");
String addr1 = (String)map1.get("addr");
value의 Generic type을 Object로 했기 때문에 .get(키값)메소드는 Object type을 리턴한다.
따라서 제대로 사용하기 위해서는 원래 type으로 casting을 해 주어야 한다.
4. 키가 addr인 키와 값 삭제하기
map1.remove("addr");
5. map1이 비어있는지 확인하기
map1.isEmpty();
6. map1의 모든 원소 삭제하기
map1.clear();
전체 코드
MainClass05.java
package test.main;
import java.util.HashMap;
import java.util.Map;
public class MainClass05 {
public static void main(String[] args) {
/*
* key : value 형태로 데이터를 저장할 수 있는 HashMap 객체 생성하고
* 참조값을 map1이라는 지역 변수에 저장하기
*
* key의 type은 String으로 가장 많이 사용한다.
* (Integer을 사용하기도 한다.)
* value의 type은 여러 type을 섞어 담을거면 Object로 지정하면 된다.
*/
Map<String, Object> map1 = new HashMap<>();
map1.put("num", 1);
map1.put("name", "김구라");
map1.put("addr", "노량진");
/*
* value의 Generic type을 Object로 했기 때문에
* .get(키값)메소드는 Object type을 리턴한다.
*
* 따라서 제대로 사용하기 위해서는 원래 type으로 casting을 해 주어야 한다.
*/
int num1 = (int)map1.get("num");
String name1 = (String)map1.get("name");
String addr1 = (String)map1.get("addr");
map1.remove("addr");
//비어있는지 여부
map1.isEmpty();
//모두 삭제
map1.clear();
}
}
예제 2
1. key의 Generic이 String이고, value의 Generic이 String인 HashMap 객체를 생성하여, Map 타입의 지역변수 dic에 참조값을 담아보자.
Map<String,String> dic = new HashMap<>();
2. dic에 원소들을 담아보자.
dic.put("cat","고양이");
dic.put("dog", "강아지");
dic.put("house", "집");
dic.put("run", "달리다");
dic.put("phone", "전화기");
3. Scanner 객체를 이용해서 영어 단어를 입력 받아 거기에 해당되는 뜻을 dic에서 찾아 입력한 단어에 대한 뜻을 출력하는 프로그래밍을 해보세요.
* 단, 없는 단어이면 존재하지 않는 단어입니다 라고 출력하면 됩니다.
while(true) {
Scanner scan = new Scanner(System.in);
System.out.print("찾을 단어를 입력하세요: ");
String line = scan.nextLine();
if(dic.get(line)==null) {
System.out.println("존재하지 않는 단어입니다");
break;
}
else {
System.out.println("뜻 : "+dic.get(line));
}
}
나는, 문제와는 조금 다르게, 없는 단어를 입력하면, "존재하지 않는 단어입니다"를 출력하고 끝나도록 구현했다,
전체 코드
MainClass06.java
package test.main;
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
public class MainClass06 {
public static void main(String[] args) {
//key의 Generic => String, value의 Generic => String
Map<String,String> dic = new HashMap<>();
dic.put("cat","고양이");
dic.put("dog", "강아지");
dic.put("house", "집");
dic.put("run", "달리다");
dic.put("phone", "전화기");
/*
* Scanner 객체를 이용해서 영어 단어를 입력 받아
* 거기에 해당되는 뜻을 dic에서 찾아 입력한 단어에 대한 뜻을 출력하는 프로그래밍을 해보세요.
* 단, 없는 단어이면 존재하지 않는 단어입니다 라고 출력하면 됩니다.
*
* 실행화면
*
*
*/
while(true) {
Scanner scan = new Scanner(System.in);
System.out.print("찾을 단어를 입력하세요: ");
String line = scan.nextLine();
if(dic.get(line)==null) {
System.out.println("존재하지 않는 단어입니다");
break;
}
else {
System.out.println("뜻 : "+dic.get(line));
}
}
}
}
"keySet()으로 key값의 집합을 Set로 얻어내기"
예제 3
MainClass07.java
Map<String,String> dic = new HashMap<>();
dic.put("cat","고양이");
dic.put("dog", "강아지");
dic.put("house", "집");
dic.put("run", "달리다");
dic.put("phone", "전화기");
dic의 키값의 집합을 keySet()으로 얻어내보자.
Set<String> keys = dic.keySet();
"iterator()으로 반복자 객체 얻어내기"
Set 안에 저장된 아이템을 일렬로 세운 반복자 객체를 얻어내보자.
Iterator<String> it = keys.iterator();
저장된 아이템이 있는 동안에 반복문을 돌며 키값을 얻어와, value값을 읽어보자.
//저장된 아이템이 있는 동안에 반복문 돌면서 아이템을 빼낸다.
while(it.hasNext()) {
//키값을 얻어와서
String key= it.next();
//키값을 이용해서 value값을 읽어온다.
String value = dic.get(key);
System.out.println(key+" : "+value);
}
.hasNext()와 .next() 메소드를 이용한다.
전체 코드
MainClass07.java
package test.main;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Scanner;
import java.util.Set;
public class MainClass07 {
public static void main(String[] args) {
//key의 Generic => String, value의 Generic => String
Map<String,String> dic = new HashMap<>();
dic.put("cat","고양이");
dic.put("dog", "강아지");
dic.put("house", "집");
dic.put("run", "달리다");
dic.put("phone", "전화기");
//key값의 집합을 Set로 얻어내기
Set<String> keys = dic.keySet();
//Set 안에 저장된 아이템을 일렬로 세운 반복자 객체 얻어내기
Iterator<String> it = keys.iterator();
//저장된 아이템이 있는 동안에 반복문 돌면서 아이템을 빼낸다.
while(it.hasNext()) {
//키값을 얻어와서
String key= it.next();
//키값을 이용해서 value값을 읽어온다.
String value = dic.get(key);
System.out.println(key+" : "+value);
}
}
}
예제 4
위의 MainCalss08에서, 찾을 value 값을 입력하고, 해당 value의 key값을 출력하는 프로그래밍을 해보세요.
1. key 값의 집합을 Set로 얻어내고, Set안에 저장된 아이템을 일렬로 세운 반복자 객체 얻어내기
//key값의 집합을 Set로 얻어내기
Set<String> keys = dic.keySet();
//Set안에 저장된 아이템을 일렬로 세운 반복자 객체 얻어내기
Iterator<String> it = dic.iterator();
2. 입력받고 line에 저장하기
Scanner scan = new Scanner(System.in);
System.out.print("찾을 value 값을 입력하세요:");
String line = scan.nextLine();
3. 결과 key값을 담을 변수 선언하고 초기화하기
String resultKey = null;
4. 반복문 돌며 입력받은 value가 있는지 확인하고, 있다면 키값을 resultKey에 저장하기
while(it.hasNext()){
String value = it.next();
if(value.equals(line)){
resultKey = key;
}
}
5. value가 있다면, 해당 키값을 출력하고, 없다면 "해당 value는 저장되지 않았습니다." 출력하기
if(resultKey!=null) {
System.out.println("key 값:"+resultKey);
}
else {
System.out.println("해당 value는 저장되지 않았습니다.");
}
전체 코드
MainClass08.java
package test.main;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Scanner;
import java.util.Set;
public class MainClass08 {
public static void main(String[] args) {
//key의 Generic => String, value의 Generic => String
Map<String,String> dic = new HashMap<>();
dic.put("cat","고양이");
dic.put("dog", "강아지");
dic.put("house", "집");
dic.put("run", "달리다");
dic.put("phone", "전화기");
//key값의 집합을 Set로 얻어내기
Set<String> keys = dic.keySet();
//Set 안에 저장된 아이템을 일렬로 세운 반복자 객체 얻어내기
Iterator<String> it = keys.iterator();
Scanner scan = new Scanner(System.in);
System.out.print("찾을 value 값을 입력하세요:");
String line = scan.nextLine();
//결과 key값을 담을 변수
String resultKey = null;
//저장된 아이템이 있는 동안에 반복문 돌면서 아이템을 빼낸다.
while(it.hasNext()) {
//키값을 얻어와서
String key= it.next();
//키값을 이용해서 value값을 읽어온다.
String value = dic.get(key);
//만일 value가 입력한 문자열과 같으면
if(value.equals(line)) {
resultKey = key;
}
}
if(resultKey!=null) {
System.out.println("key 값:"+resultKey);
}
else {
System.out.println("해당 value는 저장되지 않았습니다.");
}
}
}
'development > Java' 카테고리의 다른 글
[Java] DTO(Data Transfer Object) or VO(Value Object) /getter(), setter() (0) | 2021.11.09 |
---|---|
[Java] Util Class #3 HashSet (0) | 2021.11.09 |
[Java] Util Class #1 ArrayList (0) | 2021.11.08 |
[Java] 인터페이스 Interface / 함수형 인터페이스 FuntionalInterface, 람다식 (0) | 2021.11.08 |
[Java] 추상 클래스 Abstract Class #2 / 내부 클래스 inner class, 로컬 내부 클래스 local inner class, 익명의 클래스 (0) | 2021.11.07 |
- Total
- Today
- Yesterday
- bootstrap
- R
- 백준
- jQuery
- baekjoon
- 단계별로풀어보기
- Case When
- 파이썬
- 스프링
- Java
- append
- Django
- 문자열
- 큐
- 자바스크립트
- 브루트 포스
- jsp
- 자바
- Oracle
- 장고
- brute force
- web
- python
- html
- 정렬
- javascript
- 고득점 키트
- 덱
- 프로그래머스
- CSS
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |