✔ Map 컬렉션
- 키와 값으로 구성된 Map.Entry 객체 저장하는 구조를 가진다
- 키는 중복 저장될 수 없으나 값은 중복 저장될 수 있다
- 기존 저장된 키와 동일한 키로 값을 저장하면 기존 값 없어지고 새로운 값으로 대체
- HashMap, Hashtable, LinkedHashMap, Properties, TreeMap 등     
💢 Map 요소추가,요소검색,요소나열
- 코드
package com.javateam.jse; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import java.util.Map.Entry; import java.util.Set; public class JavaEx55 { public static void main(String[] args) { // Map map = new HashMap(); // (O) -> @SuppressWarnings("unused") Map<String,String> map = new HashMap<>(); // map 객체 생성 : HashMap 이용 // 요소 추가 map.put("신당","떡볶이"); map.put("무교", "낙지볶음"); map.put("신림", "순대"); map.put("마장","육고기"); map.put("응암", "감자탕"); map.put("마포", "갈비"); map.put("장충", "족발"); map.put("의정부", "부대찌개"); map.put("노량진", "회"); map.put("무교", "설렁탕"); map.put("노량진", "컵밥"); //map.put(null, "컵밥"); (O) null 쓸수있지만 좋지않다 System.out.println("map의 크기 : " + map.size()); // 키의 중복 배제(무교,노량진) // 낱개의 요소 검색 : key를 통해 값을 가져온다 // 중복 : 마지막에 있는 값을 불러온다 -> 값의 중복은 허용 하지만 키의 중복은 허용하지 않는다 System.out.println("임의의 키/값 : " + map.get("무교")); // 전체 나열(검색) // 1) EntrySet => map.Entry => 가장 복잡한 방법 // Set<Map.Entry<String,String>> set = map.entrySet(); // (O) // Set<Entry<String,String>> set = map.entrySet(); // Iterator<Entry<String,String>>it = set.iterator(); // while(it.hasNext()) { // // Entry<String,String> keyEntry = it.next(); // String key = keyEntry.getKey(); // String value = keyEntry.getValue(); // System.out.println(key + " = " + value); // } // 2) keySet -> 간단한다 // Set<String> set = map.keySet(); // Iterator<String> it = set.iterator(); // // while(it.hasNext()) { // String key = it.next(); // String value = map.get(key); // System.out.println(key + "=" + value); // } // 3) forEach => 간단하다 k,v : 변수 할당 안해도 된다 // map.forEach((k,v)->System.out.println(k + "=" + v)); // 4) entrySet.forEach => 가장 간단하다 = 도 자동으로 넣어준다 // map.entrySet().forEach(x->System.out.println(x)); (O) // map.entrySet().forEach(System.out::println); // (O) // 5) keySet : k -> 다른 단어나 알파벳으로 해도 된다 map.keySet().forEach(k->System.out.println(k+"="+map.get(k))); } }
▶ Map 요소추가,요소검색,요소나열 정리
- Map<String,String> map = new HashMap<>(); : map 객체 생성 -> HashMap 이용
- .put(key값,value값) : 요소 추가
- map.get(key값) : 낱개의 요소 검색 => key를 통해 값을 가져온다
- 중복 : 마지막에 있는 값을 불러온다 -> 값의 중복은 허용 하지만 키의 중복은 허용하지 않는다
- 요소 전체 나열 1) EntrySet => map.Entry => 가장 복잡한 방법 2) keySet -> 간단한다 3) forEach => 간단하다 k,v : 변수 할당 안해도 된다 4) entrySet.forEach => 가장 간단하다 = 도 자동으로 넣어준다 5) keySet : k -> 다른 단어나 알파벳으로 해도 된다
💢 Map HashMap,TreeMap 이용 객체생성,내림차순,오름차순 정렬
- 코드
package com.javateam.jse; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import java.util.Map.Entry; import java.util.NavigableMap; import java.util.Set; import java.util.SortedMap; import java.util.TreeMap; public class JavaEx56 { public static void main(String[] args) { // Map<String,String> map = new HashMap<>(); // map 객체 생성 : HashMap 이용 // Map<String,String> map = new TreeMap<>(); // map 객체 생성 : TreeMap이용 // SortedMap 기본 : 키(key)중심으로 오름차순 정렬 된다 // SortedMap<String,String> map = new TreeMap<>(); // ** SortedMap 위에 NavigableMap 이 있다 // NavigableMap 기본 : 키(key)중심으로 오름차순 정렬 된다 NavigableMap<String,String> map = new TreeMap<>(); //TreeMap<String,String> map = new TreeMap<>(); // (O) // 요소 추가 map.put("신당","떡볶이"); map.put("무교", "낙지볶음"); map.put("신림", "순대"); map.put("마장","육고기"); map.put("응암", "감자탕"); map.put("마포", "갈비"); map.put("장충", "족발"); map.put("의정부", "부대찌개"); map.put("노량진", "회"); map.put("무교", "설렁탕"); // 전체 나열(검색) //map.entrySet().forEach(System.out::println); // 내림차순(descending) 정렬(sorting/ordering) -> NavigableMap // map.descendingKeySet() : map 은 오름차순이 유지된 상태에서 set만 내림차순으로 바꿔주는것 // map.descendingKeySet().forEach(k->System.out.println(k + " = " + map.get(k))); // map.descendingMap() : map자체를 내림차순 되는 맵으로 바꿔준다 map.descendingMap().forEach((k,v)->System.out.println(k + "=" + v)); } }
▶ Map HashMap,TreeMap 이용 객체생성,내림차순,오름차순 정렬 정리
- map 객체 생성 : HashMap 이용
- map 객체 생성 : TreeMap 이용
- map 객체 생성 : SortedMap 이용
- SortedMap 기본 : 키(key)중심으로 오름차순 정렬 된다
- map 객체 생성 : NavigableMap 이용
- NavigableMap 기본 : 키(key)중심으로 오름차순 정렬 된다 💡 SortedMap 위에 NavigableMap 이 있다 💡 SortedMap , NavigableMap : 기본 오름차순 정렬
- .descendingKeySet() : map 은 오름차순이 유지된 상태에서 set만 내림차순으로 바꿔주는것
- .descendingMap() : map자체를 내림차순 되는 맵으로 바꿔준다
💢 Map 요소 일부분 추출
- 코드
package com.javateam.jse; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import java.util.Map.Entry; import java.util.NavigableMap; import java.util.Set; import java.util.SortedMap; import java.util.TreeMap; public class JavaEx57 { public static void main(String[] args) { // NavigableMap 기본 : 키(key)중심으로 오름차순 정렬 된다 NavigableMap<String,String> map = new TreeMap<>(); // 요소 추가 map.put("신당","떡볶이"); map.put("무교", "낙지볶음"); map.put("신림", "순대"); map.put("마장","육고기"); map.put("응암", "감자탕"); map.put("마포", "갈비"); map.put("장충", "족발"); map.put("의정부", "부대찌개"); map.put("노량진", "회"); map.put("무교", "설렁탕"); // 일부분 추출 // subMap 이용 // 장충(마지막 기준 키값) 포함 안돼서 출력된다 // map.subMap("마포", "장충").forEach((k,v)->System.out.println(k + "= " + v)); // 장충(마지막 기준 키값) 포함해서 출력하려면 true 사용 // map.subMap("마포",true, "장충",true).forEach((k,v)->System.out.println(k + "= " + v)); // headMap : 기준 키값 앞에 있는값 가져온다 // map.headMap("마포").forEach((k,v)->System.out.println(k + "= " + v)); // 기준 키값 포함해서 앞에 있는값 가져온다 //map.headMap("마포",true).forEach((k,v)->System.out.println(k + "= " + v)); // 기준 키값 뒤에 있는값 가져온다 map.tailMap("마포").forEach((k,v)->System.out.println(k + "= " + v)); } }
▶ Map 요소 일부분 추출 정리
- 일부분 추출 1) .subMap(시작 기준key값, 마지막 기준key값) : 마지막 기준 키값 포함 안돼서 출력된다 -> 마지막 기준 키값 포함해서 출력하려면 true 사용 2) .headMap(기준key값) : 기준 키값 앞에 있는값 가져온다 : 기준 키 값 포함 안돼서 출력 -> true 사용 3) .tailMap(기준 key값) : 기준 키값 뒤에 있는값 가져온다
💢 Map 요소 中 key값,value값 따로출력,요소 존재여부 확인,요소 삭제,여러요소 삽입
- 코드
package com.javateam.jse; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import java.util.Map.Entry; import java.util.NavigableMap; import java.util.Set; import java.util.SortedMap; import java.util.TreeMap; public class JavaEx58 { public static void main(String[] args) { // NavigableMap 기본 : 키(key)중심으로 오름차순 정렬 된다 NavigableMap<String,String> map = new TreeMap<>(); // 요소 추가 map.put("신당","떡볶이"); map.put("무교", "낙지볶음"); map.put("신림", "순대"); map.put("마장","육고기"); map.put("응암", "감자탕"); map.put("마포", "갈비"); map.put("장충", "족발"); map.put("의정부", "부대찌개"); map.put("노량진", "회"); map.put("무교", "설렁탕"); // .keySet() : key들만 출력 //map.keySet().forEach(System.out::println); // .values() : value들만 출력 //map.values().forEach(System.out::println); // .containsKey() : key 존재 여부 확인 -> true,false로 출력 //System.out.println(map.containsKey("노량진")); // .containsValue : value 존재 여부 확인 -> true,false로 출력 //System.out.println(map.containsValue("순대")); // 첫/마지막 요소 키 출력 //System.out.println(map.firstKey()); //System.out.println(map.lastKey()); // .remove() : key 삭제 //map.remove("노량진"); //map.forEach((k,v)->System.out.println(k + " = " + v)); // 여러 요소 삽입 // putAll : map에 다른 map을 넣는것 Map<String,String> map2 = new TreeMap<>(); map2.put("수원","통닭"); map2.put("우리집","집밥"); map.putAll(map2); // map 에 map2를 넣는다 map.forEach((k,v)->System.out.println(k + " = " + v)); } }
▶ Map 요소 中 key값,value값 따로출력,요소 존재여부 확인,요소 삭제,여러요소 삽입 정리
- .keySet() : key들만 출력
- .values() : value들만 출력
- .containsKey() : key 존재 여부 확인 -> true,false로 출력
- .containsValue : value 존재 여부 확인 -> true,false로 출력
- .firstKey(),.lastKey() : 첫/마지막 요소 키 출력
- .remove(key값) : key 삭제
- .putAll(삽입할 map) : : map에 다른 map을 넣는것
✔ LIFO와 FIFO 컬렉션
- Stack : 후입선출(LIFO)을 구현한 클래스
- Queue : 선입선출(FIFO)에 필요한 메소드를 정의한 인터페이스 -> 구현클래스로 LinkedList가 있다