본문 바로가기

언어공부/Java

자바 Map인터페이스, Hashtable과 HashMap, Map과 Iterator

자바 Map인터페이스, HashMap과 HashTable, Map과 Iterator에 대해서 알아보자.

Map인터페이스

Map인터페이스는 키(key)와 값(value)을 하나의 쌍으로 묶어서 저장하는 컬렉션 클래스를 구현하는 데 사용된다. (예를 들어 우편번호, 전화번호 등) 키는 중복될 수 없지만 값은 중복을 허용한다. 기존에 저장된 데이터와 중복된 키와 값을 저장하면 기존의 값은 없어지고 마지막에 저장된 값이 남게 된다.

구현클래스들은 HashMap, LinkedHashMap, TreeMap, hashtable, Properties 등이 있다.

 

 


HashtableHashMap

Hashtable과 HashMap의 관계는 Vetor와 ArrayList의 관계와 같아서 Hashtable(JDK1.0)보다는 새로운 버전인 HashMap(JDK1.2)을 사용하는 것이 좋다. HashMap은 Map을 구현했으므로 앞에서 살펴본 Map의 특징, 키(key)와 값(value)을 묶어서 하나의 데이터(entry)로 저장한다는 특징을 갖는다. 그리고 해싱(hashing, 키에서 주소로의 변환(key-to-address transformation))을 사용하지 않기 때문에 많은 양의 데이터를 검색하는데 있어서 뛰어난 성능을 보인다.

 

HashMap은 Entry라는 내부 클래스를 정의하고, 다시 Entry타입의 배열을 선언하고 있다. 키(key)와 값(value)은 별개의 값이 아니라 서로 관련된 값이기 때문에 각각의 배열로 선언하기 보다는 하나의 클래스로 정의해서 하나의 배열로 다루는 것이 데이터의 무결성(데이터의 정확성과 일관성을 유지하고, 데이터에 결손과 부정합이 없음을 보증하는 것)적인 측면에서 더 바람직하기 때문이다.

 

hashMap의 키(key)와 값(value)

HashMap은 키와 값을 각각 Object타입으로 저장한다. 즉 (Object, Object)형태로 저장하기 때문에 어떠한 객체도 저장할 수 있지만 키는 주로 String으로 대문자 또는 소문자로 통일해서 사용하고는 한다.

 

  • 키(key): 컬렉션 내의 키(key) 중에서 유일해야 한다.
  • 값(value): 키(key)와 달리 데이터의 중복을 허용한다.

키는 저장된 값을 찾는데 사용되는 것이기 때문에 컬렉션 내에서 유일(unique)해야 한다. HashMap에 저장된 데이터를 하나의 키로 검색했을 때 결과가 단 하나이어야 함을 뜻한다. 만일 하나의 키에 대해 여러 검색결과 값을 얻는다면 원하는 값이 어떤 것인지 알 수 없기 때문이다.

 

ex)

 

HashMap으로 키와 값을 저장해서 id와 비밀번호가 일치하는지 비교하는 무한루프문이다. String으로 id와 password를 받고 일단 id가 있는지 확인하고, id가 있으면 비밀번호와 일치하는지 확인하고 일치하면 프로그램을 종료하고, 일치하지 않으면 다시 프로그램이 반복된다. 

 

출력화면.

 


Map과 Iterator

Map인터페이스를 구현한 컬렉션 클래스는 키(key)와 값(value)을 하나의 쌍으로 저장하고 있기 때문에 iterator()를 직접 호출할 수 없고, 그 대신 keySet()이나 entrySet()과 같은 메소드를 통해서 키와 값을 각각 따로 Set의 형태로 얻어 온 후에 다시 iterator()를 호출해야 Iterator를 얻을 수 있다.

ex) Iterator iter=map.entrySet().iterator();

위에 문장은 Set eSet=map.entrySet(); Iterator it=eSet.iterator()을 합친 것이다. 

 

아래 예제에서는 Enumeration와 Iterator을 이용해서 키와 값을 출력한다.

Enumeration/iterator/tokenizer는 한번만 사용됨. nextElement()로 한번 사용되면 없어지기 때문에  다른 객체주소를 새로 만들어 저장하는것이 좋다.

 

ex)

 

출력화면