Java : Collection Framework(ArrayList, LinkedList, Stack, Queue)
컬렉션(collection)
- 여러 객체(데이터)를 모아 놓은 것을 의미
프레임웍(framework)
- 표준화, 정형화된 체계적인 프로그래밍 방식
컬렉션 프레임웍(collections framework)
- 컬렉션(다수의 객체)을 다루기 위한 표준화된 프로그래밍 방식
- 컬렉션을 쉽고 편리하게 다룰 수 있는 다양한 클래스를 제공
- java.util패키지에 포함. JDK1.2부터 제공
컬렉션 클래스(collection class)
- 다수의 데이터를 저장할 수 있는 클래스
컬렉션 프레임웍의 핵심 인터페이스
List Set Map
언터페이스 | 특 징 |
List | 순서가 있는 데이터의 집합. 데이터의 중복 허용 ArrayList, LinkedList, Stack, Vector 등 |
Set | 순서를 유지하지 않는 데이터의 집합, 데이터의 중복을 허용하지 않는다. HashSet, TreeSet 등 |
Map | 키(key)와 값(value)의 쌍(pair)으로 이루어진 데이터의 집합 순서는 유지되지 않으며, 키는 중복을 허용 하지 않고, 값의 중복을 허용한다. HashMap, TreeMap, Hashtable, Properties 등 |
ArrayList
- ArrayList는 기존의 Vector를 개선한 것으로 구현원리와 기능적으로 동일
ArrayList와 달리 Vector는 자체적으로 동기화처리가 되어 있다.
- List인터페이스를 구현하므로, 저장순서가 유지되고 중복을 허용한다.
- 데이터의 저장공간으로 배열을 사용한다.(배열기반)
Collection은 인터페이스, Collections는 유틸 클래스
ArrayList에 저장된 객체의 삭제과정은
for(int i=0; i<list.size(); i++)
list.remove(i);
형태로 진행하게 되면은
0일때 처음의 0을 지워주고 나머지 데이터가 올라가서 삭제가 이상하게 된다.
for(int i=list.size()-1; i>=0; i--)
list.remove(i);
ArrayList의 저장된 마지막 객체부터 삭제하면 삭제가 잘 된다.
배열의 장단점
장점 : 배열은 구조가 간단하고 데이터를 읽는 데 걸리는 시간(접근 시간, access time)이 짧다.
단점 : 크기를 변경할 수 없다, 비순차적인 데이터의 추가,삭제에 시간이 많이 걸린다.
- 크기를 변경해야 하는 경우 새로운 배열을 생성 후 데이터를 복사해야 함
- 크기 변경을 피하기 위해 충분히 큰 배열을 생성하면, 메모리가 낭비됨.
- 데이터를 추가하거나 삭제하기 위해, 다른 데이터를 옮겨야 됨.
- 순차적인 데이터 추가와 삭제는 빠르다.
배열의 단점을 보완하기 위해서 나온것이 Linked List
Linked List
- 배열과 달리 링크드 리스트는 불연속적으로 존재하는 데이터를 연결(Link)
컬렉션 | 읽기(접근시간) | 추가 / 삭제 | 비 고 |
ArrayList | 빠르다 | 느리다 | 순차적인 추가삭제는 더 빠름 비효율적인 메모리사용 |
LinkedList | 느리다 | 빠르다 | 데이터가 많을수록 접근성이 떨어짐 |
스택과 큐 (Stack & Queue)
스택(Stack) : LIFO구조. 마지막에 저장된 것을 제일 먼저 꺼내게 된다. (밑이 막힌 상자)
큐(Queue) : FIFO구조. 제일 먼저 저장한 것을 제일 먼저 꺼내게 된다.