자바 컬렉션 프레임워크
- 자바 컬렉션 : 객체를 수집해서 저장
- 프레임 워크 : 사용 방법을 미리 정해놓은 라이브러리
배열의 한계를 해결하고 객체들을 효율적으로 추가, 삭제, 검색할 수 있도록 java.util 패키지에 컬렉션과 관련된 인터페이스와 클래스들을 포함해놓은 것들을 총칭하여 부르는 용어
자바 컬렉션의 주요 인터페이스 3가지
- List
- Set
- Map
List / Set / Map 의 차이점
Collection
- list (순서를 유지하고 저장, 중복 저장 가능) -> ArrayList/Vector/LinkedList
- set(순서를 유지하지 않고 저장, 중복 저장 안 됨) -> HashSet/TreeSet
Map
(키와 값의 쌍으로 저장, 키는 중복 저장 안 됨)-> HashMap/Hashtable/TreeMap/Properties
List 컬렉션
- List의 특징
- 객체를 인덱스로 관리
- 객체 자체를 저장하는 것이 아니라 객체의 번지를 참조
- 동일 객체 중복 저장 가능
- 저장 순서 유지
- null 저장 가능 (객체는 참조하지 않음)
- List와 LinkedList 차이점
- 빈번한 객체 삭제와 삽입이 일어나는 곳에서는 ArrayList 보다 LinkedList를 사용하는 것이 좋다.
- 그러나 인덱스 검색이나, 맨 마지막에 객체를 추가하는 경우라면 ArrayList가 더 좋은 성능을 발휘한다.
- LinkedList도 ArrayList처럼 내부 배열에 객체를 저장해서 인덱스로 관리하지만, LinkedList는 인접 참조를 링크해서 체인처럼 관리한다.
- Vector
- ArrayList와 달리 동기화된 메소드로 구성되어 있기 때문에 멀티 스레드가 동시에 이 메소드들을 실행할 수 없고, 하나의 스레드가 실행을 완료해야만 다른 스레드를 실행할 수 있다. (멀티 스레드 환경에서 스레드 세이프하다!)
Set 컬렉션
- Set의 특징
- 하나의 null만 저장할 수 있다.
- 저장 순서 유지되지 않음, 중복 허용 안 됨
- hashSet은 equals() 메소드로 두 객체를 비교하고 true가 나오면 동일 객체로 판단 후 중복 저장을 하지 않는다.
- Set 컬렉션 사용 시 객체를 하나씩 가져오는 방법
- Iterator 사용
- 향상된 for문 사용
Map 컬렉션
- Map의 특징
- 키와 값으로 구성된 Entry 객체를 저장하는 구조
- 키는 중복 저장이 불가 하지만 값은 중복 저장될 수 있다.
- 같은 키 값으로 저장하면 기존 값은 없어지고 새로운 값으로 대치된다.
- TreeMap
- Set 컬렉션 사용 시 객체를 하나씩 가져오는 방법
- 키를 알고 있는 경우 get() 메소드 사용
- ketSet()메소드로 모든 키를 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();
}