이 글은 이것이 자바다를 참고하여 작성되었습니다.
: 키(key)와 값(value)으로 구성된 Entry 객체를 저장하는 구조.
- 키와 값은 모두 객체이다.
- 키는 중복 저장될 수 없지만 값은 중복 저장될 수 있다.
기존에 저장된 키와 동일한 키로 값을 저장하면 기존의 값은 없어지고 새로운 값으로 대치된다.- 키로 객체들을 관리한다.
- put() 메소드 : 객체 추가
- get() 메소드 : 키로 객체를 찾아옴
- remove() 메소드 : 객체 삭제
저장된 전체 객체를 대상으로 하나씩 얻고 싶을 경우
1. keySet() 메소드로 모든 키를 Set컬렉션으로 만든 다음 반복자를 통해 키를 하나씩 얻고 get() 메소드를 통해 값을 얻는다.Map<K, V> map = ~; Set<K> keySet = map.keySet(); Iterator<K> keyIterator = keySet.iterator(); while(keyIterator.hasNext()) { K key = keyIterator.next(); V value = map.get(key); }
- entrySet() 메소드로 모든 Map.Entry를 Set 컬렉션으로 얻은 다음 반복자를 통해 Map.Entry를 하나씩 얻고 getKey()와 getValue() 메소드를 이용해 키와 값을 얻으면 된다.
Set<Map.Entry<K, V>> entrySet = map.entrySet(); Iterator<Map.Entry<K, V>> entryIterator = entrySet.iterator(); while(entryIterator.hasNext()) { Map.Entry<K, V> entry = entryIterator.next(); K key = entry.getKey(); V value = entry.getValue(); }
: Map 인터페이스를 구현한 대표적인 Map 컬렉션.
- HashMap의 키로 사용할 객체는 hashCode()와 equals() 메소드를 재정의해서 동등 객체가 될 조건을 정해야 한다.
- HashMap 생성 : 키 타입과 값 타입을 파라미터로 주고 기본 생성자 호출
Map<K, V> map = new HashMap<K, V>();- 키와 값의 타입은 기본 타입을 사용할 수 없고 클래스 및 인터페이스 타입만 가능하다.
- hashCode()와 equals() 메소드 재정의 필요
: HashMap과 동일한 내부 구조를 가지고 있다.
- 키로 사용할 객체는 hashCode()와 equals() 메소드를 재정의해서 동등 객체가 될 조건을 정해야 한다.
- HashMap과의 차이점은 동기화된 메소드로 구성되어 있기 때문에 하나의 스레드가 실행을 완료해야만 다른 스레드를 실행할 수 있다. 이것을 스레드가 안전하다고 말한다.
- Hashtable 생성 : 키 타입과 값 타입을 파라미터로 주고 기본 생성자 호출
Map<K, V> map = new Hashtable<K, V>();
: Hashtable의 하위 클래스이기 때문에 Hashtable의 모든 특징을 그대로 가지고 있다.
- Hashtable vs Properties
- Hashtable : 키와 값을 다양한 타입으로 지정 가능
- Properties : 키와 값을 String 타입으로 제한한 컬렉션
- 애플리케이션의 옵션 정보, 데이터베이스 연결 정보 그리고 국제화(다국어) 정보가 저장된 프로퍼티 파일을 읽을 때 주로 사용한다.