티스토리 뷰

728x90
반응형

저번 게시물에서 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는 저장되지 않았습니다.");
	 	}
	}
}

 

반응형
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
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 31
글 보관함