컬렉션 : 여러 객체(데이터)를 모아놓은 것
프레임웍 : 표준화, 정형화 된 체계적인 프로그래밍 방식
라이브러리 : 만들어놓은 기능을 모아놓은 것 (기능만 제공)
컬렉션 프레임웍
- 컬렉션(다수의 객체)을 다루기 위한 표준화된 프로그래밍 방식
- 컬렉션을 쉽고, 편리하게 다룰 수 있는 다양한 클래스 제공
컬렉션 클래스
- 다수의 데이터를 저장할 수 있는 클래스 (ex : Vector, ArrayList, HashSet)
ArrayList는 기존의 Vector를 개선한 것으로, 구현 원리와 기능이 동일함.
Vector는 동기화 처리가 되어있고, ArrayList는 동기화 처리가 안되어있음.
List interface 구현 -> 저장 순서 유지되고, 중복 허용.
데이터의 저장 공간으로써, 배열을 사용함. (배열 기반)
Object[] 배열이 형성되어 있어, 모든 종류의 객체를 저장할 수 있다. (다형성)
ArrayList에 저장된 객체의 삭제 과정
list.remove(2); 호출
삭제할 데이터 아래의 데이터(index 3 이상)를 한 칸씩 위로 복사해서 삭제할 데이터를 덮어씀
데이터가 모두 한칸씩 이동했으므로, 마지막 데이터는 null로 변경
데이터가 삭제되어, 데이터의 갯수가 줄어들었기 때문에 size의 값을 감소시킨다.
ArrayList에 저장된 첫 번째 객체부터 삭제하는 경우 : 배열 복사 발생
ArrayList에 저장된 마지막 객체부터 삭제하는 경우 : 배열 복사 발생 안함!!! -> 데이터 이동 없음! -> 빠르고, 다 지워짐!
크기를 변경할 수 없음. (실행 중에 바꿀 수 없음)
비순차적인 데이터(중간 자리에)의 추가, 삭제에 시간이 오래 걸림
배열의 단점을 보완 (크기 변경 불가, 추가 삭제에 시간이 오래 걸림)
배열과 달리, 불연속적으로 존재하는 데이터를 연결함
배열은 각 요소가 연속적이나, LinkedList는 불연속적이다.
배열과 달리, Data 하나 하나가 연결되어 있는 구조이며, Node라고 한다.
class Node {
Node next; // 다음 노드
Object obj; // 데이터
}
데이터 삭제 : 중간에 있는 값 삭제 시, 중간의 참조를 끊고 그 다음 노드로 연결 (단 한번의 참조 변경)
데이터 추가 : Node 객체 생성 후, 참조 변경을 하여 연결. (한번의 Node 객체 생성, 두 번의 참조 변경)
단점
접근성이 안좋다
Doubly linked list : 이중 연결리스트. 접근성 up! (데이터의 삭제, 추가는 번거로워짐) 하지만, 아직도 정방향/역방향으로의 순차적 접근만 가능
class Node {
Node next; // 다음 요소
Node previous; // 이전 요소
Object obj; // 데이터
}
Doubly circular linked list : 이중 원형 연결리스트
ArrayList VS LinkedList
자료구조(Data Structure)에서,
ArrayList는 "배열 기반 자료구조"로,
LinkedList는 "연결 기반 자료구조"로 분류한다.
자료구조는 배열기반과 연결기반으로 분류되어 있다.
배열기반 자료구조는 "연속적"이고, 연결기반 자료구조는 "불연속적"이다.