-
[Java] 컬렉션 프레임워크 4 (Map, HashMap 중심으로)IT Study/컴퓨터 기초 2023. 3. 29. 19:14728x90
1. Map 인터페이스란?
Map 인터페이스는 키-값 쌍의 데이터를 저장하는 컬렉션 프레임워크입니다.
각 키(Key)는 유일해야 하지만, 값(Value)은 중복이 가능하다는 특징을 가집니다. (저장 순서는 보장하지 않습니다.)
→ 따라서 키(Key)를 통해 값(Value)을 검색할 수 있습니다. (Key, Value null 가능)
더하여 Key-Value 쌍을 entry(엔트리)라고 합니다.
☑️ 아래의 Entry 인터페이스와 이름이 동일하기 때문에 헷갈릴 수 있습니다.
Entry 인터페이스는 인터페이스라는 정확한 명칭을 붙여 설명할테니,
그냥 엔트리라고 적혀있다면 키-값 쌍으로 생각해주세요.1-1. Map.Entry 인터페이스
Entry 인터페이스는 Map.Entry라는 이름으로 java.util 패키지에 선언된 인터페이스입니다.
Entry 인터페이스는 Key-Value 쌍을 나타내는 객체를 다룰 때에 사용되는 인터페이스입니다.
1-1-1. Map.Entry 인터페이스의 메서드
이름 매개변수 기능 반환타입 getKey() - 엔트리의 Key 반환 K (엔트리의 Key 타입) getValue() - 엔트리의 Value 반환 V (엔트리의 Value 타입) setValue(V v) 수정할 Value 엔트리의 Value를
수정할 Value로 변경V equals(Object o) 비교할 객체 엔트리 객 boolean, 동일 시 true 1-1-2. Entry(엔트리 인터페이스)와 Iterator(이터레이터 인터페이스)
Map 인터페이스에서는 엔트리(키 - 값)를 하나씩 가져오기 위해
entrySet() 메서드 그리고 Iterator와 iterator() 메서드를 사용합니다.
(🗯️ 아래 예시를 읽어보고, 본인이 원하는 메서드를 선택해서 사용하세요! 저는 EntrySet이 편할 것 같습니다.. 쿄쿄)
<entrySet을 사용하는 경우>
Map<String, Integer> map = new HashMap<>(); map.put("apple", 1); map.put("banana", 2); map.put("cherry", 3); for(Map.Entry<String, Integer> entry : map.entrySet()) { String key = entry.getKey(); Integer value = entry.getValue(); System.out.println("Key: " + key + ", Value: " + value); }
<출력>
Key: banana, Value: 2
Key: apple, Value: 1
Key: cherry, Value: 3<Iterator(이터레이터)를 사용하는 경우>
Map<String, Integer> map = new HashMap<>(); map.put("apple", 1); map.put("banana", 2); map.put("cherry", 3); Iterator<Map.Entry<String, Integer>> iter = map.entrySet().iterator(); while(iter.hasNext()) { Map.Entry<String, Integer> entry = iter.next(); String key = entry.getKey(); Integer value = entry.getValue(); System.out.println("Key: " + key + ", Value: " + value); }
<출력>
Key: banana, Value: 2
Key: apple, Value: 1
Key: cherry, Value: 32. HashMap
가장 일반적으로 사용되는 Map 인터페이스를 구현한 클래스입니다.
Key-Value로 이뤄진 Entry 객체를 해시 테이블에 저장하는 방식으로 동작합니다.
2-1. HashMap인터페이스의 메서드
이름 매개변수 기능 반환타입 clear() - Map의 모든 K-V 제거 - clone() - Map의 복사본 생성 Object, 복사본 반환 containsKey(Object k) 존재하는지 확인할 Key Map 내 Key 존재 여부 확인 boolean, 존재 시 true containsValue(Object v) 존재하는지 확인할 Value Map 내 Value 존재 여부 확인 boolean, 존재 시 true entrySet() - Map 내 모든 K-V를 담은
Set 객체 반환Set,엔트리 형태로
Set에 저장해 반환equals(Object o) 비교할 객체 Map과 객체가 동일한지 확인 boolean, 동일 시 true get(Object k) Key 객체 Key에 대응하는 Value 반환
(대응 값 없을 시 null 반환)V, Value 객체 반환 getOrDefault
(Object k, V defaultValue)Key 객체,
null 시의 기본 값Key에 대응하는 Value 반환
(대응 값 없을 시 기본 값 반환)V, Value 객체 반환 isEmpty() - Map 비어 있는지 확인 boolean, 비어 있으면 true keySet() - Map의 모든 Key 담은
Set 객체 반환Set put(Object k, Object v) 추가할 Key 객체,
추가할 Value 객체Map에 K-V 추가 Object putAll(Map m) 추가할 Map Map에
추가할 Map의 모든 요소 추가- remove(Object k) 제거할 Value의 Key Key의 Value 제거 Object, 제거된 값 반환
(제거된 값 없을 시 null)replace
(Object k, Object newValue)변경할 값의 Key,
새로운 ValueKey의 Value를
새로운 Value로 변경Object, 변경 전 값 반환
(변경된 값 없을 시 null)replace
(Object k, Object v,
Object newValue)변경할 값의 Key,
변경할 값의Value,
새로운 ValueKey와 Value 일치 시
새로운 Value로 변경boolean, 변경 시 true size() - Map의 요소 수 반환 int values() - Map의 모든 K-V를
컬렉션 형태로 반환Collection 3. TreeMap
TreeMap에서는 Red-Black Tree라는 구조를 이용한 클래스입니다.
Key의 정렬을 유지하고 있어, 저장된 데이터를 순서대로 탐색할 수 있다는 특징을 가지고 있습니다.
Key의 정렬을 유지하는 만큼, Key 값으로 null을 사용할 수 없습니다.
4. LinkedHashMap
해시 테이블과 연결 리스트를 조합한 클래스입니다.
HashMap과 마찬가지로 Key-Value로 이뤄진 Entry 객체를 해시 테이블에 저장하는 방식으로 동작하는데,
연결 리스트에 데이터를 추가로 연결할 수 있습니다. 따라서 그 순서를 유지하며 탐색할 수 있다는 점이 특징입니다.
'IT Study > 컴퓨터 기초' 카테고리의 다른 글
[Java] 열거형 (Enum) (0) 2023.04.06 [Java] 제네릭과 와일드카드 (0) 2023.04.05 [Java] 컬렉션 프레임워크 3 (List, ArrayList 중심으로) (2) 2023.03.28 [Java] 컬렉션 프레임워크 2 (Set, HashSet 중심으로) (0) 2023.03.28 [Java] 컬렉션 프레임워크 1 (컬렉션 인터페이스) (0) 2023.03.28