Map 인터페이스
- Map<K, V> 인터페이스를 구현하는 컬렉션 클래스들의 인스턴스들은 Key와 Value가 한 쌍을 이루는 형태로 데이터를 저장한다.
- Key는 Value를 찾는 지표가 되며, Value가 실질적인 데이터가 된다.
- 이때 Key는 중복될수 없으며, Key가 다르다면 Value는 중복되어도 상관없다.
Map 인터페이스의 메소드
메소드 | 설명 |
V put(K key, V value) | value를 key에 연결(mapping)하여 저장 |
V get(Object key) | 전달된 key에 대응하는 value를 반환 해당 key에 연결(mapping)되는 value가 없으면 null 반환 |
V remove(Object key) | 전달된 key에 대응하는 value를 제거 |
V replace(K key, V value) | 전달된 key에 대응하는 value를 전달 된 값으로 대체함 |
void clear( ) | 해당 맵의 모든 key-value를 제거 |
Set<K> keySet( ) | 해당 맵에 저장되어 있는 모든 key로 만들어진 Set 객체를 반환 |
boolean containsKey(Object key) | 해당 맵이 전달된 key를 포함하고 있는지 확인 |
boolean containsValue(Object value) | 해당 맵이 전달된 value에 해당하는 하나 이상의 key를 포함하는지 확인 |
int size( ) | 해당 맵의 key-value 총 개수를 반환 |
boolean isEmpty( ) | 해당 맵이 비어있는지 확인 |
Map 컬렉션 클래스
HashMap<K, V> | 순서 X , 정렬 X |
TreeMap<K, V> | 순서 X , 정렬 O (key를 기준으로 정렬) |
class MapCollection_HashMap {
public static void main(String[] args) {
HashMap<Integer, String> map = new HashMap<>();
// Key-Value 기반 데이터 저장 (put)
map.put(45, "Brown");
map.put(37, "James");
map.put(23, "Martin");
// 데이터 탐색 (get)
System.out.println("23번: " + map.get(23));
System.out.println("37번: " + map.get(37));
System.out.println("45번: " + map.get(45));
System.out.println();
// 데이터 삭제 (remove)
map.remove(37);
// 데이터 삭제 확인
System.out.println("37번: " + map.get(37));
}
}
// 실행 결과
23번: Martin
37번: James
45번: Brown
37번: null
HashMap의 순차적 접근 방법
- Map<K, V> 인터페이스는 Iterable<T> 인터페이스를 구현하지 않으니, 반복자를 얻어 순차적 접근을 진행 할 수 없다.
- 대신에 keyset( ) 메소드를 이용하면 순차적 접근을 진행할 수 있다.
- public Set<K> keyset( )
- 이 메소드는 Set 인터페이스를 구현하는 컬렉션 인스턴스를 생성하고, 여기에 모든 Key를 담아서 반환한다.
- 이때 Set<K>은 Iterable<T>를 상속하기 때문에 이를 통해 순차적인 접근이 가능하다.
public class MapCollection_HashMap_Iterator {
public static void main(String[] args) {
HashMap<Integer, String> map = new HashMap<>();
map.put(45, "Brown");
map.put(37, "James");
map.put(23, "Martin");
// key만 담고 있는 컬렉션 인스턴스 생성 (keySet 이용)
Set<Integer> ks = map.keySet();
// 전체 key 출력 (for-each문 기반)
for (Integer n : ks)
System.out.print(n + " ");
System.out.println();
// 전체 value 출력 (for-each문 기반)
for (Integer n : ks)
System.out.print(map.get(n) + " ");
System.out.println();
// 전체 value 출력 (반복자 기반)
for(Iterator<Integer> itr = ks.iterator(); itr.hasNext();)
System.out.print(map.get(itr.next()) + " ");
System.out.println();
}
}
// 실행 결과
37 23 45
James Martin Brown
James Martin Brown
TreeMap의 순차적 접근 방법
- TreeMap<K, V>는 정렬된 상태를 유지한다. (기본 오름차순)
- 정렬 기준을 따로 설정해주고 싶다면 다음 예제와 같이 Comparator<T> 인터페이스를 구현하는 클래스를 정의해주고, 해당 클래스를 기반으로 인스턴스를 생성해주면된다.
class AgeComparator implements Comparator<Integer> {
public int compare(Integer n1, Integer n2) {
return n2.intValue() - n1.intValue(); // 내림차순 정렬
}
}
class MapCollection_TreeMap_Comparator {
public static void main(String[] args) {
TreeMap<Integer, String> map = new TreeMap<>(new AgeComparator());
map.put(45, "Brown");
map.put(37, "James");
map.put(23, "Martin");
// key만 담고 있는 컬렉션 인스턴스 생성 (keySet)
Set<Integer> ks = map.keySet();
/* 1) for-each문 */
// 전체 key 출력
for (Integer n : ks)
System.out.print(n + " ");
System.out.println();
// 전체 value 출력
for (Integer n : ks)
System.out.print(map.get(n) + " ");
System.out.println();
/* 2) 반복자 */
// 전체 key 출력
for (Iterator<Integer> itr = ks.iterator(); itr.hasNext();)
System.out.print(itr.next() + " ");
System.out.println();
// 전체 value 출력
for (Iterator<Integer> itr = ks.iterator(); itr.hasNext();)
System.out.print(map.get(itr.next()) + " ");
System.out.println();
}
}
// 실행 결과
45 37 23
Brown James Martin
45 37 23
Brown James Martin
Reference
https://bangu4.tistory.com/205?category=1003336
'☕ Java > 이론' 카테고리의 다른 글
[Java] 컬렉션 기반 알고리즘 (sort, binarySearch, copy) (0) | 2022.01.25 |
---|---|
[Java] Queue 컬렉션 클래스 (0) | 2022.01.25 |
[Java] Set 컬렉션 클래스 (0) | 2022.01.25 |
[Java] List 컬렉션 클래스 (0) | 2022.01.25 |
[Java] 컬렉션 프레임워크 (0) | 2022.01.18 |
[Java] 제네릭3 (와일드 카드) (0) | 2022.01.17 |
[Java] 제네릭2 (상속, 제네릭 인터페이스) (0) | 2022.01.14 |
[Java] 제네릭1 (제네릭 클래스, 제네릭 메소드) (0) | 2022.01.13 |