* Map?
키(key)와 값(value)로 구성된 entity 객체를 저장하는 구조를 가지고 있다. 키/값 둘 다 모두 객체이다. 키는 중복 저장될 수 없지만 값은 중복 저장될 수 있다. 만약 기존에 저장된 키와 동일한 키로 값을 저장하면 기존의 값은 없어지고 새로운 값으로 대치된다.
Map 컬렉션에는 HashMap, Hashtable, LinkedHashMap, Properties, TreeMap 등이 있다.
* Map 컬렉션에서 공통적으로 사용 가능한 Map 인터페이스의 메소드
K / V라는 타입 파라미터는 Map 인터페이스가 제네릭 타입이기 때문이다. 구체적인 타입은 구현 객체를 생성할 때 결정된다. 키를 알고있다면 get()메소드로 간단하게 객체를 찾아오면 되지만, 저장된 객체 전체를 대상으로 하나씩 얻고 싶은 경우에는 두 가지 방법을 사용할 수 있다.
1. keySet() 메소드로 모든 키를 Set 컬렉션으로 얻은 다음, 반복자를 통해 키를 하나씩 얻어 get() 메소드를 통해 값을 얻는다.
2. entrySet() 메소드로 모든 Map.Entry를 Set 컬렉션으로 얻은 다음, 반복자를 통해 Map.Entry를 하나씩 얻고 getKey()와 getValue() 메소드를 이용해 키와 값을 얻는다.
* Hashtable?
Hashtable은 HashMap과 동일한 내부 구조를 가지고 있다. Hashtable도 키로 사용할 객체는 hashCode()와 equals() 메소드를 재정의해서 동등 객체가 될 조건을 정해야 한다. HashMap과의 차이점은 Hashtable은 동기화된(synchronized) 메소드로 구성되어 있기 때문에 멀티 스레드가 동시에 이 메소드들을 실행할 수는 없고, 하나의 스레드가 실행을 완료해야만 다른 스레드를 실행할 수 있다. 따라서 멀티 스레드 환경에서 안전하게 객체를 추가, 삭제할 수 있고 따라서 Thread safe할 수 있다.
- Hashtable의 생성 방법
Map<K, V>map = new Hashtable<K, V>( );
'JAVA' 카테고리의 다른 글
추상 클래스 (Abstract class) (0) | 2021.07.29 |
---|---|
Static (0) | 2021.07.21 |
Collection Framework (0) | 2021.07.05 |
Interface(인터페이스) (0) | 2021.06.30 |
String과 StringBuilder 비교하기 (String vs StringBuilder) (0) | 2021.06.21 |