[컬렉션 프레임워크] Map

seratpfk·2022년 8월 9일
0

JAVA

목록 보기
86/96

Hash Map

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();
		}
	}

Tree Map

이진 트리(binary tree)

  1. 모든 노드는 2개의 자식을 가질 수 있다.
  2. 작은 값은 왼쪽, 큰 값은 오른쪽에 저장한다.

TreeMap

  1. key를 기준으로 왼쪽에 작은 값, 오른쪽에 큰 값이 저장된다.
  2. 자동으로 정렬되면서 저장된다.
  3. 크기 비교 및 범위 연산에 적절하다.
		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=사만다}

  • key를 기준으로 정렬되어 있음.

순회

		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));
		}
	}

0개의 댓글