1.HashMap, HashTable


해쉬 맵과 해쉬 테이블은 Key와 Value를 저장하는데 Key는 데이터를 구분할 이름이라 이해하고


Value는 내용인 값이 저장될 자리이다.


해쉬의 값은 key값을 알아야만 Value값을 추출 할 수 있고 key값을 알 경우에는 상관 없지만


모를 경우에는 Iterator을 이용해 key값을 추출 할 수 있다.


만약 key value값을 둘 다 빼내고 싶다면 Entry와 Iterator을 같이 이용하면 된다. 아래 예제를 확인해보자


맵과 테이블의 차이점은 동기화의 유무이다. 다중 스레드(동시 작업)을 이용 할 경우 맵의 경우는 동기화를 하지 않고


테이블의 경우는 동기화를 해준다.


테이블은 동기화를 하기 때문에 맵에 비해서 자원의 소모가 조금 더 있는 편이다.



package chap09.exam04.map;

import java.util.Map.Entry;
import java.util.HashMap; // <- impor문 정리하는 방법
import java.util.Iterator;
import java.util.Set;
									// Ctrl + shift + O

public class HashMapEx {

	public static void main(String[] args) {
		// HashMap = Key - Value  << 중요, 많이 쓰임
		HashMap<String, Integer> map = new HashMap<String, Integer>();
		
		map.put("kim",  23); // value의 Type을 반환하게 되어있다.
		map.put("lee",  26);
		map.put("park",  26);
		map.put("kim",  37); // 키가 중복인 경우 덮어쓴다.
		System.out.println(map.size());
		// 맵에서 값 꺼내기(키를 이용하여 빼온다)
		System.out.println(map.get("lee"));
		
		// map의 모든 값을 출력 1 : 키 값만 이용하여 추출
		// key 만 가져온다.
		Set<String> keySet = map.keySet();
		// key를 조각 낸다.
		Iterator<String>iter = keySet.iterator();
		//key로 value를 하나씩 가져온다.
		while(iter.hasNext()) { // 값이 존재 하는가?
			String key = iter.next(); // 있으면 뽑아온다.
			System.out.println(map.get(key));
		}
		System.out.println();
		for(String key : keySet) {
			System.out.println(map.get(key));
		}
		
		// map의 모든 값을 출력 2 : 키-값 단위로 가져온 후 추출
		// map에서 entry를 뽑아옴 : entry (key-value 한 쌍으로 잘라줌)
		Set<Entry<String, Integer>> entry = map.entrySet();
		// 가져올 수 있도록 잘라줌
		Iterator<Entry<String, Integer>> iterlator = entry.iterator();
		// 하나씩 꺼내옴(키-값 한 쌍)
		while(iterlator.hasNext()) {
			Entry<String, Integer> item = iterlator.next();
			// entry로 부터 키와 값을 뽑아냄
//			String key = item.getKey();
//			int value = item.getValue();
			System.out.println(item.getKey() + " : " +  item.getValue());
		}
	}

}
package chap09.exam04.map;

import java.util.Hashtable;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;

public class HashTableEx {

	public static void main(String[] args) {
		// 사용법은 HashMap과 동일
		Map<String, Integer> map = new Hashtable<String, Integer>();
		map.put("a", 70);
		map.put("b", 80);
		map.put("c", 60);
		map.put("d", 90);
		map.put("e", 75);
		map.put("f", 45);
		map.put("g", 30);
		map.put("h", 50);
		map.put("i", 55);
		map.put("j", 99);
		
		// 찾는 키가 있으면 키의 값을 보여주고, 없으면 없다고 알림
		// 찾는 이름 : d
		if(map.containsKey("d")) {
			System.out.println("d의 점수 : " + map.get("d"));
		} else {
			System.out.println("찾으시는 값은 없어염");
		}
		
		// 99점 학생이 존재 하는지?
		if(map.containsValue(99)) {
			System.out.println("99점이 있었네...");
		} else {
			System.out.println("찾으시는 분은 안계세yo");
		}
		
		// 99점 학생은 누구인가?(값으로 키를 찾는 방법)
		
		// 키셋 방법
		Set<String> keySet = map.keySet();
		// key를 조각 낸다.
		Iterator<String>iter = keySet.iterator();
		//key로 value를 하나씩 가져온다.
		while(iter.hasNext()) { // 값이 존재 하는가?
			String key = iter.next(); // 있으면 뽑아온다.
			int value = map.get(key);
			if(value == 99) {
				System.out.println("99점인 사람 : " + key + ", " + value);
			}
		}
		
		// 엔트리 방법
		// 1. map의 entry(키-값)을 set으로 반환
		Set<Entry<String, Integer>> entries = map.entrySet();
		// 2. 잘라낼 수 있도록 Iterator 화
		Iterator<Entry<String, Integer>> iter2 = entries.iterator();
		// 3. 하나씩 뽑아내서 값을 비교
		while(iter2.hasNext()) {
			Entry<String, Integer> item = iter2.next();
			if(item.getValue() == 99) {
				System.out.println("99점 학생 : " + item.getKey());
			}
		}
		
		// 번외 향상된 for문 가능?
		for(Entry<String, Integer> item : entries) {
			System.out.println(item.getKey() + " : " + item.getValue());
		}
	}

}


'개념 및 코딩 > 07.Collection Framework' 카테고리의 다른 글

[JAVA]07-05.Stack, Queue  (0) 2018.09.04
[JAVA]07-03.Hashset  (0) 2018.09.04
[JAVA]07-02.ArrayList, LinkedList  (0) 2018.09.04
[JAVA]07-01.Collection, Map  (0) 2018.09.04

+ Recent posts