컬렉션 프레임워크는 간단히 말해, 리스트, 스택, 큐, 트리 등의 자료구조
에
정렬, 탐색 등의 알고리즘
을 구조화해 놓은 프레임워크이다.
여러 개의 데이터 묶음 자료를 효과적으로 처리하기 위해 구조화된 클래스 또는 인터페이스의 모음
배열 : 저장공간의 크기가 고정적
(固定的)
리스트 : 저장공간의 크기가 가변적
(可變的)
a. add(E element) : 매개변수로 입력된 원소를 마지막에 추가
b. add(int index, E element) : index위치에 입력된 원소 추가
c. addAll(Collection<? Extends E> c) : 입력된 컬렉션 전체를 마지막에 추가
d. addAll(int index, Collection<? Extends E> c) : index위치에 컬렉션 전체를 추가
e. set(int index, E element) : index위치에 있는 원소값을 입력값으로 변경
f. remove(int index) : index위치의 원소값 삭제
g. remove(Object o) : 입력값과 동일한 객체 삭제
h. clear() : 전체 원소 삭제
i. get(int index) : index위치의 원소값을 꺼내 리턴
j. size() : 리스트 객체 내에 포함된 원소 개수
k. isEmpty() : 리스트의 원소가 하나도 없는지 여부를 리턴
l. toArray() : 리스트를 Object 배열로 변환
특징
원소를 인덱스로 관리
특징
특징
ArrayList와 동일하나 몇 가지 차이점이 있다.
List<E> aLinkedList1 = new LinkedList<Integer>(); // O
List<E> aLinkedList1 = new LinkedList<Integer>(20); // X
앞뒤 객체의 정보를 저장
하여, 모든 데이터가 서로 연결된 형태이다.자바완전정복.642p
ArrayList는 배열형태이기 때문에 데이터를 추가하거나 삭제할 때, 밀려나거나 당겨지는 모든 데이터의 위치정보를 수정해줘야한다. 반면, LinkedList는 원소의 앞뒤 객체 정보만 바꿔주면 되기 때문에 데이터를 추가하거나 삭제할 때 훨씬 효율적이다. 다만, 데이터를 검색하는 과정에서는 배열형태의 ArrayList가 훨씬 빠르다.
🔹 데이터 검색: ArrayList
사용
🔹 데이터 수정(추가/삭제) : LinkedList
사용
Set는 기본적으로 데이터의 인덱스 정보를 갖고 있지 않다.
그래서 List인터페이스와 다르게 index가 포함된 메소드는 사용할 수 없다.
인덱스 정보가 없기 때문에 데이터를 중복해 저장하면 특정 데이터를 지칭해 꺼낼 방법이 없다.
그래서 Set는 중복 저장을 허용하지 않는다.
(옷 주머니와 비슷한 개념, 한 주머니에 여러 데이터를 모아둔 집합체)
중복값 처리가 필요할 때 사용하면 좋다.
a. add(E element) : 매개변수로 입력된 원소를 리스트에 추가
b. addAll(Collection<? Extends E> c) : 입력된 컬렉션 전체를 추가
c. remove(Object o) : 매개변수와 동일한 객체 삭제
d. clear() : 전체 원소 삭제
e. isEmpty() : Set 객체가 비어있는지 여부를 리턴
f. contains(Object o) : 매개변수로 입력된 원소가 있는지 여부를 리턴
g. size() : 리스트 객체 내에 포함된 원소 개수
h. iterator() : Set객체 내의 데이터를 연속해 꺼내는 Iterator 객체 리턴
i. toArray() : 리스트를 Object 배열로 변환
Set은 인덱스 정보가 없으므로 List처럼 for문을 사용하여 데이터를 1개
씩 꺼낼 수가 없다.
그래서 만들어진 메소드가 iterator()
메소드이다.
이 방법 외에도 인덱스 정보가 없이 사용할 수 있는 for-each문
을 사용해도 된다.
특징
hs.add("가");
hs.add("나");
hs.add("가");
// [가, 나]
특징
자식 클래스
로 모든 기능이 동일한데,연결 정보를 추가한 클래스
이다.불가능
하다.특징
정렬
및 검색
기능이 추가된 클래스이다.크기순
으로 출력한다. 즉, HashSet이 데이터의 출력 기준을 두 객체의 동일 여부로 봤다면, TreeSet은 입력 순서와 상관없이 크기순
으로 출력한다.핵심 기능
은 정렬과 검색은 SortedSet와 NavigableSet에서 상속받은 것이기 때문에 객체 생성 시 반드시 TreeSet으로 선언
해야 정렬 및 검색 메소드를 호출할 수 있다.TreeSet<String> treeSet = new TreeSet<String>();
a. first() : Set 원소 중 가장 작은 원소값을 리턴
b. last() : Set 원소 중 가장 큰 원소값을 리턴
c. lower(E element) : 매개변수보다 작은 수 중 가장 큰 수
d. higher(E element) : 매개변수보다 큰 수 중 가장 작은 수
e. floor(E element) : 매개변수보다 같거나 작은 수 중 가장 큰 수
f. ceiling(E element) : 매개변수보다 같거나 큰 수 중 가장 작은 수
g. pollFirst() : Set 원소들 중 가장 작은 원소값을 리턴
h. pollLast() : Set 원소들 중 가장 큰 원소값을 리턴
i. headSet(E toElement) : toElement 미만인 모든 원소로 구성된 Set을 리턴(toElement 미포함)
j. headSet(E toElement, boolean inclusive)
toElement 미만/이하인 모든 원소로 구성된 Set을 리턴 (inclusive=true이면 toElement 포 함, inclusive=false이면 inclusive 미포함)
k. tailSet(E fromElement) : toElement 이상인 모든 원소로 구성된 Set을 리턴 (fromElement 포함)
List인터페이스와 Set인터페이스는 Collection인터페이스를 상속받는 반면, Map<K,V>는 별도의 인터페이스로 존재한다. 따라서 저장의 형태와 방식이 앞 두 인터페이스와는 다르다.
Key와 Value 한 쌍으로 데이터를 저장
Map<K,V>는 Key(키)와 Value(값)의 한 쌍으로 데이터를 저장한다. 이 때 한 쌍의 데이터를 엔트리
라고 하며, Map.Entry 타입
으로 정의된다. 즉, 데이터를 엔트리 단위로 입력받는 것이다.
Key는 중복 불가 X
, Value는 중복 가능 O
만일 동일한 Key가 2개 이상이라면 map.get(중복되는 키값)와 같이 실행할 때 어떤 값을 가져올 지 결정할 수 없을 것이다. 따라서 Map<K,V>에서 Key는 중복이 불가하며, Value는 중복이 허용되는 것이다.
자바완전정복(p.680)
a. put(K key, V value) : 매개변수의 key, value를 Map 객체에 추가
b. putAll(Map<? extends K,? extends V>m) : 매개변수의 Map객체를 통째로 추가
c. replace(K key, V value) : Key에 해당하는 값을 Value값으로 변경
d. replace((K key, V oldValue, V newValue) : oldValue를 newValue로 변경
e. get(Object key) : 매개변수 key값에 해당하는 oldValue를 리턴
f. containsKey(Object key) : 매개변수 Key값이 포함돼 있는지 여부 확인
g. containsValue(Object value) : 매개변수 value값이 포함돼 있는지 여부 확인
h. keySet() : Map 데이터들 중 Key들만 뽑아 Set 객체로 리턴
i. entrySet() : Map의 각 엔트리들을 Set 객체로 담아 리턴
j. size() : Map에 포함된 엔트리의 개수
k. remove(Object key) : 매개변수의 Key를 갖는 엔트리 삭제
l. remove(Object key, Object value) : 매개변수의 key,value를 갖는 엔트리 삭제
m. clear() : Map객체 내의 모든 데이터 삭제
특징
단일 쓰레드
에 적합특징
멀티 쓰레드
에 안정성을 가진다. (내부의 주요 메서드가 동기화 메소드로 구현되어 있음)특징
정렬
및 검색
기능을 추가한 클래스이다.정렬
및 검색
기능을 상속받기 때문에 TreeMap타입
으로 선언해야한다. 그래야 정렬,검색 메소드를 사용할 수 있다.a. firstKey() : Map 원소 중 가장 작은 Key 값 리턴
b. firstEntry() : Map 원소 중 가장 작은 Key값을 갖는 엔트리를 리턴
c. lastKey() : Map 원소 중 가장 큰 Key 값 리턴
d. lastEntry() : Map 원소 중 가장 큰 Key값을 갖는 엔트리를 리턴
e. lowerKey(K key) : 매개변수 Key값보다 작은 Key값 중 가장 큰 Key값 리턴
f. lowerEntryK key) : 매개변수 Key값보다 작은 Key값 중 가장 큰 Key값을 갖는 엔트리를 리턴
g. higherKey(K key) : 매개변수 Key값보다 큰 Key값 중 가장 작은 Key값 리턴
h. higherEntry(K key) : 매개변수 Key값보다 큰 Key값 중 가장 작은 Key값을 갖는 엔트리를 리턴
i. pollFirstEntry() : Map 원소 중 가장 작은 Key값을 갖는 엔트리를 꺼내 리턴
j. pollLastEntry() : Map 원소 중 가장 큰 Key값을 갖는 엔트리를 꺼내 리턴
k. headMap(K toKey)
l. headMap(K toKey, boolean inclusive)
m. tailMap(K fromKey)
n. tailMap(K fromKey, boolean inclusive)
o. subSet(K fromKey,K toKey)
p. subSet(K fromKey,boolean frominclusive, K toKey, boolean toinclusive)