데이터 군을 저장하는 클래스들을 표준화한 설계
라이브러리는 공통으로 사용될만한 유용한 기능을 묘듈화해서 제공
프레임워크는 단순히 기능뿐만아니라 프로그래밍 방식을 정형화해서
프로그램의 개발생산성을 높이고 유지보수를 용이하게한다.
컬렉션 프레임워크는 크게 3가지 타입으로 나뉜다. List Set Map
List와 Set의 공통된 부분은 새로운 인터페이스인 Colletion으로 정의된다.
Collection 인터페이스(List Set)의 메서드
boolean add(Object o): 객체(o)를 Collection에 추가한다.
void clear : Collection의 모든 객체를 삭제한다.
boolean contains(Object o) : 객체(o)가 Collection에 포함되어있는지 확인한다.
boolean equals(Object o) : 동일한 Collection인지 비교한다.
boolean isEmpty() : Collection이 비어있는지 확인한다.
boolean remove(Object o) : 지정된 객체를 삭제한다.
int hashCode() : Collection의 해쉬코드를 반환한다.
int size() : Collection에 저장된 객체의 개수를 반환한다.
Object[] toArray() : Collection에 저장된 객체를 객체배열(Object[])로 반환한다.
List : 순서가 있는 데이터의 집합. 데이터의 중복을 허용
ArrayList LinkedList Vector이 List를 상속받는다.
List인터페이스의 메서드
void add(int index, Object element) : 지정된 위치(index)에 객체(element)를 추가한다.
Object get(int index) : 지정된 위치(index)에 있는 객체를 반환한다.
int indexOf(Object o) : 지정된 객체의 위치(index)를 반환한다.(첫요소부터 순방향으로)
int lastIndexOf(Object o) : 지정된 객체의 위치(index)를 반환한다.(마지막 요소부터 역방향으로)
Object remove(int index) : 지정된 위치(index)에 있는 객체를 삭제하고 삭제된 객체를 반환한다.
Object set(int index, Object element) : 지정된 위치(index)에 객체(element)를 저장한다.
void sort(Comparator c) : 지정된 비교자(Comparator c)로 List를 정렬한다.
List subList(int fromIndex, int toindex) : 지정된 범위에 있는 객체를 반환한다.
데이터의 저장순서가 유지되고 중복을 허용한다.
배열기반으로 구현되어 연속된 메모리 공간을 사용한다.
데이터를 순차적으로 저장한다. 타입 선언이 가능하지만 그냥 선언하면 모든 타입을 담을 수 있다.
ArrayList list1 = new ArrayList()
로 선언 가능.
ArrayList<Integer> list2 = new ArrayList<Integer>()
처럼 타입선언도 가능하다.
표준 배열보다는 느리지만 많은 조작이 필요한 경우 유용하게 사용할 수 있다.
객체가 추가되어 size가 초과되면 자동으로 부족한 크기만큼 늘어난다.
인덱스를 이용해 O(1)로 임의 접근이 가능하다. 요소 삽입, 삭제가 리스트 중간이나 시작부분에서 발생할 경우 모든 요소를 옮겨야 하므로 O(n)이 소요된다.
배열의 단점(크기변경x, 비순차적데이터의 추가 삭제에 시간이 많이 걸림)을 보완하기위해 고안
불연속적으로 존재하는 데이터를 서로 연결(link)한 형태로 구성되어있다.
각 요소(node)는 다음 요소에 대한 참조(주소값)와 데이터로 구성되어있다.
데이터의 추가/삭제시 포인터의 참조(주소값)만 수정하면 되기때문에 처리속도가 O(1)매우 빠르다.
하지만 저장하는 데이터의 개수가 많아질수록 접속시간(데이터를 읽는 시간)이 길어지는 단점이 있다. 요소에 접근하기 위해 시작노드부터 차례대로 따라가야하므로 O(n)이 소요된다.
Stack : LIFO, 후입선출. ArrayList와 같은 배열기반이 구현하기 적합.
활용 예 : 수식계산, 워드프로세서의 redo/undo, 웹브라우저의 앞으로/뒤로가기 등
Que : FIFO, 선입선출. LinkedList와 같은 데이터 추가/삭제가 쉬운게 구현하기 적합.
활용 예 : 최근사용문서, 대기열, 버퍼(buffer)
Stack st = new Stack();
Queue q = new LinkedList(); // 링크드리스트로 큐 구현
st.push("0"); // 스택은 push로 데이터 입력
st.push("1");
System.out.Println(st.peak();) // 1 peak()은 꺼내지는 않고 맨 윗값 출력만
System.out.Println(st.pop();) // 1 pop()으로 데이터를 꺼내면서 출력.
q.offer("0"); // 큐는 offer로 데이터 입력
q.offer("1");
System.out.Println(q.peak();) // 0 peak()은 꺼내지는 않고 맨 아래값 출력만
System.out.Println(q.poll();) // 0 poll()으로 데이터를 꺼내면서 출력.
Set : 순서를 유지하지 않는 데이터의 집합. 데이터의 중복을 허용하지 않는다.
HashSet SortedSet(<-TreeSet)이 Set을 상속받는다.
수학의 집합 개념을 활용한 자료구조. 교집합 합집합 차집합 같은 집합 연산을 쉽게 수행할 수 있다.
Set인터페이스의 메서드는 Collection의 매서드를 참고하면 된다.
Set인터페이스를 구현한 가장 대표적인 컬렉션이며 중복된 요소를 저장하지 않는다.
하지만 저장순서를 유지하지 않으므로 중복을 제거함과 동시에 저장순서를 유지하려면 LinkedHashSet을 사용해야 한다.
add메서드로 요소를 추가하는데 중복요소가 있다면 false를 반환한다.
Set set1 = new HashSet();
으로 선언
이진탐색트리라는 자료구조의 형태로 데이터를 저장하는 컬렉션 클래스다.
Treeset은 이진탐색트리의 성능을 향상시킨 레드-블랙트리로 구현되어 있다.
이진탐색트리 : 크기가 왼쪽자식노드<부모노드<오른쪽자식노드 로 값이 저장.
항상 이렇게 정렬되어 단일 값 검색과 범위검색이 매우 빠르다.
배열이나 링크드리스트에 비해 검색과 정렬기능이 뛰어나고 추가/삭제가 느리다.(반복비교로 자리를 찾아 저장)
중복된 데이터의 저장을 허용하지 않으며 자동으로 정렬된 위치에 저장하므로 저장순서를 유지하지 않는다.
각 노드에는 왼쪽자식노드, 참조변수, 오른쪽자식노드가 담겨있다.
Set set1 = new TreeSet();
으로 선언
최대값, 최소값, n보다 작은값, 큰값, n과 가장 비슷한값, 범위검색 등을 하기 쉽다.
Map : Key와 Value의 쌍(Pair)으로 이루어진 데이터의 집합.
순서 유지 x. 키는 중복 x. value는 중복 허용.
HashTable HashMap(<-LinkedHashMap) SortedMap(<-TreeMap)이 Map을 상속받는다.
Map인터페이스의 메서드
Object put(Object key, Object value) : Map에 저장된 value객체를 key에 연결(mapping)해 저장한다.
Object remove(Object key) : 지정한 key객체와 일치하는 key-value쌍을 삭제한다.
int size() : map에 저장된 key-value쌍의 개수를 반환한다.
Collection values() : Map에 저장된 모든 value객체를 반환한다.
void clear : Map의 모든 객체를 삭제한다.
boolean containsKey(Object key) : 지정된 key객체와 일치하는 Map의 key객체가 있는지 확인한다.
boolean containsValue(Object value) : 지정된 value객체와 일치하는 map의 value객체가 있는지 확인한다.
Set entrySet() : map에 저장되어있는 key-value쌍을 set으로 반환한다.
boolean equals(Object o) : 동일한 map인지 비교한다.
Object get(Object key) : 지정한 key객체에 대응하는 value객체를 찾아서 반환한다.
int hashCode() : 해쉬코드를 반환한다.
boolean isEmpty() : Map이 비어있는지 확인한다.
Set keySet() : Map에 저장된 모든 key객체를 반환한다.
value는 중복이 허용이라 Collection타입으로 반환하고 key는 중복이 허용되지않아 Set타입으로 반환한다.
HashTable보다 HashMap의 사용이 낫다.
Key-Value를 묶어 하나의 데이터(entry)로 저장한다.
해싱(Hashing)을 사용하기때문에 많은 양의 데이터를 검색하는데 있어 뛰어난 성능을 보인다.
key와 value 어떤 object타입이든 가능하지만 키는 일반적으로 String을 대문자나 소문자로 통일해서 쓴다. KEY는 절대로 중복되면 안되며(유일, Unique해야 한다.) value는 중복이 가능하다. 동일한 키에 다른 value 저장시 기존 value가 사라지고 덮어씌워진다.
HashMap map1 = new HashMap();
으로 선언
map1.put(key,value); 로 저장한다.