2013년 1월 16일 수요일

[Java] HashMap

Key와 Value로 구성된 맵구조를 구현한 클래스이다.

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

몇가지 메소드를 살펴보면
map.put("Kevin", 40); Key와 Value 입력
map.get("Kevin"); Key로 Value 얻기
map.remove("Kevin"); Key로 해당 Key와 Value 삭제
map.containsKey("Kevin"); Key값으로 존재 유무 확인


Set set = map.entrySet();
Iterator iter = set.iterator();
while(iter.hasNext()){
Map.Entry e = (Map.Entry)iter.next();//정적내부 인터페이스 Entry
System.out.println("key: " + e.getKey() + ", value: " + e.getValue());
System.out.println(e);
}

해쉬에서는 바로 Iterator인터페이스를 활용할 수 없다. 그러나 entrySet();이란 메소드를 통해 Iterable 인터페이스를 구현한 Set 객체를 활용할 수 있다. 이 Set클래스의 메소드에서 iterator()메소드를 호출하면 드디어 Iterator 인터페이스를 활용할 수 있는 것이다. (즉 이 Iterator의 위치가 되고 싶어서 Set이란 인터페이스를 거치는 과정이다.)

따라서 iter.hasNext()를 호출할수 있다.

그러나 문제는 바로 iter.next()를 사용할 수 없다. 방법은 Map.Entry를 사용하는 것이다.

Map.Entry e = (Map.Entry)iter.next();

Map.Entry를 API에서 찾아보면 Map인터페이스 안에 구현되어 있는 내부 정적 인터페이스이다. 즉 개체생성을 하지 않더라도 인터페이스 이름으로 접근하여 메소드를 사용할 수 있으리라. Map이라는 인터페이스만 보더라도 Hashmap이 Map인터페이스를 구현하고 있다는 것은 당연하다.
 iter.next()메소드는 제네릭을 반환하는데 이 제네릭을 Map.Entry로 형변환하면 Key와 Value를 다룰 수 있는 것이다. 그리하여 e를 이용하여 getKey()와 getValue()를 사용하면 원래 map에 있는 Key와 Value를 활용할 수 있다.

댓글 없음:

댓글 쓰기