컬렉션
여러 객체(데이터)를 모아놓은 것을 의미
프레임 워크
표준화, 정형화 된 체계적인 프로그래밍 방식
컬렉션 프레임웍 (Collections Framework)
컬렉션을 다루기 위한 표준화된 프로그래밍 방식
컬렉션을 쉽고 편리하게 다룰 수 있는 다양한 클래스를 제공
java.util패키지에 포함
컬렉션 클래스
다수의 데이터를 저장할 수 있는 클래스 (Vector, ArrayList, HashSet)
핵심 인터페이스
인터페이스 | 특징 |
List | 순서가 있는 데이터의 집합, 데이터의 중복을 허용한다 |
구현 클래스 : ArrayList, LinkedList, Stack, Vector 등 | |
Set | 순서를 유지하지 않는 데이터의 집한, 데이터의 중복을 허용하지 않는다 예)양의 정수 집합, 소수의 집합 |
구현 클래스 : HashSet, TreeSet 등 | |
Map | 키(key)와 값(value)의 쌍으로 이루어진 데이터의 집합 순서는 유지되지 않으며, 키는 중복을 허용하지 않고, 값은 중복을 허용한다 |
구현 클래스 : HashMap, TreeMap, Hashtable, Properties 등 |
Map 인터페이스
값은 중복을 허용하기 때문에 Collection타입으로 반환하고, 키는 중복을 허용하지 않기 때문에
Set타입으로 반환한다
Map.Entry 인터페이스
Map인터페이스의 내부 인터페이스이다
ArrayList
기존의 Vector를 개선한 것으로 구현원리와 기능적으로 동일하다
Object배열을 이용해서 데이터를 순차적으로 저장한다(배열기반)
생성할 때 실제 저장할 개수보다 여유있는 크기로 하는 것이 좋다
ArrayList에 저장된 객체의 삭제 과정
1. 삭제할 데이터의 아래에 있는 데이터를 한 칸씩 위로 복사해서 삭제할 데이터를 덮어쓴다
2. 데이터가 모두 한 칸씩 위로 이동하였으므로 마지막 데이터는 null로 변경해야한다
3. 데이터가 삭제되어 데이터의 개수가 줄었으므로 size의 값을 1 감소시킨다
배열과 LinkedList
배열은 구조가 간단하며 사용하기 쉽고 데이터를 읽는 시간이 짧다
하지만 크기를 변경할 수 없고, 순차적이지 않은 데이터의 추가 또는 삭제에 시간이 많이 걸린다
이러한 단점을 보완하기 위해 linked list가 고안되었다
링크드 리스트(linked list)
불연속적으로 존재하는 데이터를 서로 연결한다
데이터 삭제 : 단 한 번의 참조변경으로 가능
데이터 추가 : 새로운 요소(node)를 생성한 다음 두 번의 참조변경을 한다
더블 링크드 리스트(doubly linked list)
이중 연결 리스트.
링크드 리스트의 이동방향이 단방향인것을 보완하여 이전요소에 대한 참조를 가능하게 만들었다 //접근성 향상
더블 서큘러 링크드 리스트(doubly circular linked list)
이중 원형 연결리스트
LinkedList 클래스는 더블 링크드 리스트로 구현되어 있다.
ArrayList(배열기반) vs LinkedList(연결기반)의 성능비교
순차적으로 추가/삭제하는 경우 ArrayList > LinkedList
중간 데이터를 추가/삭제하는 경우(비순차적) ArrayList < LinkedList
인덱스가 n인 데이터의 주소 = 배열의 주소 + n*데이터 타입의 크기
컬렉션 | 읽기(접근 시간) | 추가/삭제 | 비고 |
ArrayList | 빠르다 | 느리다 | 순차적인 추가삭제는 더 빠름 비효율적인 메모리사용 |
LinkedList | 느리다 | 빠르다 | 데이터가 많을수록 접근성이 떨어짐 |