Map 컬렉션 / 검색기능을 강화시킨 컬렉션
2019. 8. 14. 15:19ㆍIT/Java
Map 컬렉션
Map 컬렉션의 특징 및 주요 메소드
-
특징
- 키(Key)와 값(value)으로 구성된 Map.Entry 객체를 저장하는 구조
- 키와 값은 모두 객체
- 키는 중복될 수 없지만 값은 중복 저장이 가능하다.
-
구현 클래스
- HashMap
- HashTable
- LinkedHashMap
- Properties
- TreeMap
-
주요 메소드
기능 메소드 설명 객체 추가 V put(K key, V value) 주어진 키와 값을 추가, 저장이 되면 값을 리턴 객체 검색 boolean containsKey(Object key) 주어진 키가 있는지 여부 boolean containsValue(Object value) 주어진 값이 있는지 여부 Set<Map.Entry<K,V>> entrySet() 키와 값의 쌍으로 구성된 모든 Map.Entry 객체를 Set 에 담아서 리턴 V get(Object key) 주어진 키의 값을 리턴 boolean isEmpty() 컬렉션이 비어있는지 여부 Set keySet() 모든 키를 Set 객체를 담아서 리턴 int size() 저장된 키의 총 수를 리턴 Collection values() 저장된 모든 값 Collection 에 담아서 리턴 객체 삭제 void clear() 모든 Map.Entry(키와 값)를 삭제 V remove(Object key) 주어진 키와 일치하는 Map.Entry 삭제, 삭제가 되면 값을 리턴
-
객체 추가, 찾기, 삭제
Map<String,Integer> map = ...; map.put("학생1",30); int score = map.get("학생"); map.remove("학생1");
-
전체 객체를 대상으로 반복해서 얻기
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); }
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();
}
HashMap
Map<K, V> map = new HashMap<K, V>();
-
특징
-
키 객체는 hashCode()와 equals()를 재정의해서 동등 객체가 될 조건을 정해야한다.
-
키 타입은 String을 많이 사용한다.
String은 문자열이 같을 경우 동등 객체가 될 수 있도록 hashCode()와 equals()메소드가 재정의 되어있기 때문
-
Hashtable
Map<K, V> map = new Hashtable<K, V>();
-
특징
- 키 객체는 hashCode()와 equals()를 재정의해서 동등 객체가 될 조건을 정해야한다.
- Hashtable은 스레드 동기화(synchronization)가 되어 있기 때문에 복수의 스레드가 동시에 접근해서 객체를 추가, 삭제하더라도 스레드에 안전(thread safe)하다
Properties
-
특징
- 키와 값을 String 타입으로 제한한 Map 컬렉션이다.
- Properties는 프로퍼티(~.properties) 파일을 읽어 들일 때 주로 사용한다.
-
프로퍼티 파일
- 옵션 정보, 데이터베이스 연결 정보, 국제화(다국어) 정보를 기록한 텍스트 파일로 활용
- 애플리케이션에서 주로 변경이 잦은 문자열을 저장해서 유지 보수를 편리하게 만들어줌
- 키와 값이 = 기호로 연결되어 있는 텍스트 파일로 ISO 8859-1문자셋으로 저장
- 한글은 유니코드로 변환되어 저장
검색 기능을 강화시킨 컬렉션
-
TreeSet
-
TreeMap
이진 트리 구조
-
부모 노드와 자식 노드로 구성
20
10 30
- 왼쪽 자식 노드 : 부모보다 적은 값
- 오른쪽 자식 노드 : 부모보다 큰 값
-
정렬이 쉬움
- 올림 차순 : [왼쪽 노드 -> 부모 노드 -> 오른쪽 노드]
- 내림 차순 : [오른쪽 노드 -> 부모노드-> 왼쪽 노드]
TreeSet
TreeSet<E> treeSet = new TreeSet<E>();
-
특징
- 이진 트리(binary tree)를 기반으로한 Set 컬렉션
- 왼쪽과 오른쪽 자식노드를 참조하기 위한 두개의 변수로 구성
-
주요 메소드
- 특정 객체를 찾는 메소드 : first(), last(), lower(), higher(),..
- 정렬 메소드: descendingIterator(), descendingSet()
- 범위 검색 메소드 : headSet(), tailSet(), subSet()
TreeMap
TreeMap<K, V> treeMap = new TreeMap<K, V>();
-
특징
- 이진 트리(binary tree)를 기반으로한 Map 컬렉션
- 키와 값이 저장된 Map.Entry를 저장
- 왼쪽과 오른쪽 자식노드를 참조하기 위한 두개의 변수로 구성
-
주요 메소드
- 단일 노드 객체를 찾는 메소드 : firstEntry(), lastEntry(), lowerEntry(), higherEntry(),..
- 정렬 메소드: descendingKeySet(), descendingMap()
- 범위 검색 메소드 : headMap(), tailMap(), subMap()
Comparble 와 Comparator
-
TreeSet과 TreeMap의 자동 정렬
-
TreeSet의 객체와 TreeMap의 자동 정렬
-
TreeSet의 객체와 TreeMap의 키는 저장과 동시에 자동 오름차순으로 정렬
-
숫자(Integer,Double)타입일 경우에는 값으로 정렬
-
문자열(String) 타입일 경우에는 유니코드로 정렬
-
TreeSet과 TreeMap은 정렬을 위해 java.lang.Comparable을 구현한 객체를 요구
(Integer,Double,String은 모두 O)
-
-
-
사용자 정의 객체를 정렬하고 싶을 경우
-
방법 1 : 사용자 정의 클래스가 Comparable을 구현
public class Person implements Comparable<Person>{ public String name; public int age; public Person(String name, int age) { this.name = name; this.age = age; } } @Override public int compareTo(Person o) { if(age<o.age) return -1; else if(age == o.age) return 0; else return 1; } }
- 방법 2 : TreeSet, TreeMap 생성시 Comparator 구현 객체 제공
-
'IT > Java' 카테고리의 다른 글
LIFO와 FIFO 컬렉션 (0) | 2019.08.14 |
---|---|
Set 컬렉션 (0) | 2019.08.14 |
List 컬렉션 (0) | 2019.08.14 |
14장 람다식 (0) | 2019.07.30 |
제네릭(Generic) (0) | 2019.07.25 |