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 |