본문 바로가기

# 02/Java

[윤성우 열혈자바] 23-5. Map<E> 인터페이스를 구현하는 컬렉션 클래스들

반응형

Key-Value 방식의 데이터 저장과 HashMap<K, V> 클래스


public static void main(String[] args) {

HashMap<Integer, String> map = new HashMap<>();


// Key-Value 기반 데이터 저장

map.put(45, "Brown");

map.put(37, "James");

map.put(23, "Martin");


// 데이터 탐색

System.out.println("23번 : " + map.get(23));

System.out.println("37번 : " + map.get(37));

System.out.println("45번 : " + map.get(45));


// 데이터 삭제

map.remove(37);


// 데이터 삭제 확인

System.out.println("37번 : " + map.get(37));

}






3학년 2반 HashMap이 있을 떄, 키는 중복되지 않아야 해서 set인터페이스 구현. 

set은 컬렌션 인터페이스를 구현했기 때문에 반복자 생성 가능. 

우리는 즉 키의 반복자를 이용해서 순차적 접근이 가능하다!!








HashMap<K, V>의 순차적 접근 방법


HashMap<K, V> 클래스는 Iterable<T> 인터페이스를 구현하지 않으니 for-each 문을 통해서, 혹은 '반복자'를 얻어서 순차적 접근을 진행할 수 없다.


대신 다음 메소드 호출을 통해서 Key를 따로 모아 놓은 컬렉션 인스턴스를 얻을 수 있다.

그리고 이때 반환된 컬렉션 인스턴스를 대상으로 반복자를 얻을 수 있다.


public Set<K> KeySet()








HashMap<K, V>의 순차적 접근의 예


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만 담고 있는 컬렉션 인스턴스 생성

Set<Integer> ks = map.keySet();


// 전체 Key 출력 (for-each문 기반)

for (Integer n : ks)

System.out.print(n.toString() + '\t');

System.out.println();


// 전체 Value 출력 (for-each문 기반)

for (Integer n : ks)

System.out.print(map.get(n).toString() + '\t');

System.out.println();


// 전체 Value 출력 (반복자 기반)

for (Iterator<Integer> itr = ks.iterator(); itr.hasNext();  )

System.out.print(map.get(itr.next()) + '\t');

System.out.println();

}










TreeMap<K, V>의 순차적 접근의 예


public static void main(String[] args) {

TreeMap<Integer, String> map = new TreeMap<>();

map.put(45, "Brown");

map.put(37, "James");

map.put(23, "Martin");


Tree 자료구조의 특성상 반복자가 정렬된 순서대로 key들에 접근을 하고 있다. 

이렇듯 반복자의 접근 순서는 컬렉션 인스턴스에 따라 달라질 수 있다.


// Key만 담고 있는 컬렉션 인스턴스 생성

Set<Integer> ks = map.keySet();


// 전체 Key 출력 (for-each문 기반)

for (Integer n : ks)

System.out.print(n.toString() + '\t');

System.out.println();


// 전체 Value 출력 (for-each문 기반)

for (Integer n : ks)

System.out.print(map.get(n).toString() + '\t');

System.out.println();


// 전체 Value 출력 (반복자 기반)

for (Iterator<Integer> itr = ks.iterator(); itr.hasNext();  )

System.out.print(map.get(itr.next()) + '\t');

System.out.println();

}






반응형