Map은 Key-Value 쌍을 저장하는 자료구조
- Key는 Map내에서 유일해야 한다.
- Key는 중복될 수 없지만 Value는 중복될 수 있다.
- Map은 순서를 유지하지 않는다.
자바는
HashMap, TreeMap, LinkedHashMap의 다양한 구현체를 제공한다.
지바의 Set은 중복을 허용하지 않는데 이KeySet()(Map의 키 목록을 조회하는 메소드)를 호출하면 Set자료구조를 반환한다.
즉, Map의 키가 Set의 구조이다.
- HashMap:
구조: HashMap 은 해시를 사용해서 요소를 저장한다. 키( Key ) 값은 해시 함수를 통해 해시 코드로 변환되고, 이
해시 코드는 데이터를 저장하고 검색하는 데 사용된다.
특징: 삽입, 삭제, 검색 작업은 해시 자료 구조를 사용하므로 일반적으로 상수 시간( O(1) )의 복잡도를 가진다.
순서: 순서를 보장하지 않는다.- LinkedHashMap:
구조: LinkedHashMap 은 HashMap 과 유사하지만, 연결 리스트를 사용하여 삽입 순서 또는 최근 접근 순서에
따라 요소를 유지한다.
특징: 입력 순서에 따라 순회가 가능하다. HashMap 과 같지만 입력 순서를 링크로 유지해야 하므로 조금 더 무겁
다.
성능: HashMap 과 유사하게 대부분의 작업은 O(1) 의 시간 복잡도를 가진다.
순서: 입력 순서를 보장한다.
3. TreeMap:
구조: TreeMap 은 레드-블랙 트리를 기반으로 한 구현이다.
특징: 모든 키는 자연 순서 또는 생성자에 제공된 Comparator 에 의해 정렬된다.
성능: get , put , remove 와 같은 주요 작업들은 O(log n) 의 시간 복잡도를 가진다.
순서: 키는 정렬된 순서로 저장된다.
Map<String, Integer> studentMap = new HashMap<>(); //학생 성적 데이터 추가 studentMap.put("studentA", 90); studentMap.put("studentB", 80); studentMap.put("studentC", 80); studentMap.put("studentD", 100); //특정 학생 값 조회 Integer result = studentMap.get("studentD"); System.out.printf("result = "+result); //result = 100 //Map의 키값을 통해서 value를 찾는다.
//keySet 활용 Set<String> keySet = studentMap.keySet(); for(String key : keySet){ Integer value = studentMap.get(key); System.out.printf("key = "+key+", value = "+value);keySet활용결과
key = studentB, value = 80
key = studentA, value = 90
key = studentD, value = 100
key = studentC, value = 80
//entrySet 활용 Set<Map.Entry<String, Integer>> entries = studentMap.entrySet(); for (Map.Entry<String, Integer> entry : entries) { String key = entry.getKey(); Integer value = entry.getValue(); System.out.println("key=" + key + ", value=" + value); }entrySet활용 결과 key=studentB, value=80 key=studentA, value=90 key=studentD, value=100 key=studentC, value=80
//values 활용 Collection<Integer> values = studentMap.values(); for (Integer value : values) { System.out.println("value = " + value); }values 활용결과 value = 80 value = 90 value = 100 value = 80