Map 생성
- Map<Key, Value>
Map<String, String> dictionary = new HashMap<String, String>();
추가
- 새로운 key값을 사용하면 추가
dictionary.put("apple", "사과"); // put(key, value) dictionary.put("banana", "바나나"); dictionary.put("tomato", "토마토"); dictionary.put("mango", "망고"); dictionary.put("melon", "멜론");
수정
- 기존의 key값을 사용하면 수정
dictionary.put("melon", "메론");
삭제
- 삭제할 요소의 key를 전달하면 삭제됨
- 삭제된 value가 반환됨
String removeItem = dictionary.remove("tomato"); System.out.println(removeItem);
값(Value) 확인
System.out.println(dictionary.get("apple")); // 사과 System.out.println(dictionary.get("peach")); // null
관리
- Value를 String으로 관리
Map<String, String> map1 = new HashMap<String, String>(); map1.put("title", "어린왕자"); map1.put("author", "생택쥐베리"); map1.put("price", 10000 + ""); System.out.println(map1);
- Value를 Object로 관리
Map<String, Object> map2 = new HashMap<String, Object>(); map2.put("title", "홍길동전"); map2.put("author", "허균"); map2.put("price", 20000); System.out.println(map2);
순회
Map<String, Object> map = new HashMap<String, Object>(); map.put("title", "소나기"); map.put("author", "황순원"); map.put("price", 20000);
- Entry 단위로 순회(for)
Map<String, Object> map = new HashMap<String, Object>(); map.put("title", "소나기"); map.put("author", "황순원"); map.put("price", 20000);
- Key를 이용한 순회(for)
for(String key : map.keySet()) { System.out.println(key + ":" + map.get(key)); }
연습문제
- title, author, price 정보를 가진 임의의 Map 3개를 만들고,
- 생성된 Map 3개를 ArrayList에 저장한 뒤
- ArrayList에 저장된 Map 3개를 for문으로 순회하시오.
public static void m4() { Map<String, Object> map1 = new HashMap<String, Object>(); map1.put("title", "소나기"); map1.put("author", "황순원"); map1.put("price", 20000); Map<String, Object> map2 = new HashMap<String, Object>(); map2.put("title", "어린왕자"); map2.put("author", "생택쥐베리"); map2.put("price", 10000); Map<String, Object> map3 = new HashMap<String, Object>(); map3.put("title", "홍길동전"); map3.put("author", "허균"); map3.put("price", 30000); List<Map<String, Object>> list = new ArrayList<Map<String,Object>>(); List.add(map1); List.add(map2); List.add(map3); for(Map<String, Object> map : list) { // List for(Map.Entry<String, Object> entry : map.entrySet()) { // Map System.out.println(entry.getKey() + ":" + entry.getValue()); } System.out.println(); } }
이진 트리(binary tree)
- 모든 노드는 2개의 자식을 가질 수 있다.
- 작은 값은 왼쪽, 큰 값은 오른쪽에 저장한다.
TreeMap
- key를 기준으로 왼쪽에 작은 값, 오른쪽에 큰 값이 저장된다.
- 자동으로 정렬되면서 저장된다.
- 크기 비교 및 범위 연산에 적절하다.
Map<Integer, String> map = new TreeMap<Integer, String>();
map.put(65, "제시카");
map.put(85, "에밀리");
map.put(35, "제임스");
map.put(95, "사만다");
System.out.println(map);
출력:
{35=제임스, 65=제시카, 85=에밀리, 95=사만다}
순회
for(Map.Entry<Integer, String> entry : map.entrySet()) { System.out.println(entry.getKey() + ":" + entry.getValue()); }
출력:
35:제임스
65:제시카
85:에밀리
95:사만다
정렬
- TreeMap은 treeMap만 사용할 수 있는 메소드가 다수 있으므로
- TreeMap타입으로 생성하는 것이 좋다.
기본 정렬 : 오름차순 정렬
TreeMap<Integer, String> map = new TreeMap<Integer, String>(); map.put(65, "제시카"); map.put(85, "에밀리"); map.put(35, "제임스"); map.put(95, "사만다");
정렬 변경 : decendingMap() 메소드 호출
NavigableMap<Integer, String> map2 = map.descendingMap(); for(Map.Entry<Integer, String> entry : map2.entrySet()) { System.out.println(entry.getKey() + ":" + entry.getValue()); }
다시 오름차순 정렬
NavigableMap<Integer, String> map3 = map2.descendingMap(); for(Integer key : map3.keySet()) { System.out.println(key + ":" + map3.get(key)); } }