요소의 중복을 허용하며, 인덱스를 기반으로 요소에 접근(ArrayList, LinkedList 등이 이에 속함 등)
저장공간이 필요에 의해 자동으로 늘어난다.(순서가 있는 저장공간)
특징 : 순서가 있고, 중복을 허용(배열과 유사)
장점 : 가변적인 배열 (배열이 자동으로 늘어남)
단점 : 원하는 데이터가 뒤쪽에 위치하는 경우 속도의 문제
방식 : equals()를 이용한 데이터 검색
자바에서 List자료 구조는 크게 vector, arrayList, LinkedList로 나눠진다.
1) ArrayList : 객체 내부에 있는 배열에 데이터 저장
가변적인 배열로, 배열의 크기를 동적으로 변경할 수 있음
일반적인 배열과 달리 ArrayList는 크기를 미리 지정할 필요가 없으며, 요소를 추가하거나 제거함에 따라 자동으로 크기가 조절됨
상당히 빠르고 크기를 맘대로 조절할 수 있는 배열
단방향 포인터 구조로 자료에 대한 순차적인 접근에 강점
ArrayList 특징
동적 크기 : 요소가 추가되거나 제거될 때마다 자동으로 크기가 조정되는 동적배열
인덱스 접근 : 인덱스 기반의 자료구조로, 특정 위치의 요소에 빠르게 접근가능
순서 유지 : 요소를 추가한 순서대로 요소를 저장함, 요소의 순서를 유지
중복 허용 : 동일한 요소를 여러 번 포함할 수 있음
Null 요소 허용 : null 요소를 허용함
데이터를 순서대로 저장하고 빠르게 접근해야 하는 경우 매우 유용함 중간에 요소를 삽입하거나 삭제하는 연산은 비효율적이므로, 이런 경우 LinkedList 같은 다른 자료구조를 고려하는 것이 좋음
2) Vector : ArrayList와 동일하게 사용이 가능
ArrayList의 구형버전이며, 모든 메소드가 동기회 됨
잘 쓰이진 않음
Vector 특징
동적 크기 : 요소가 추가되거나 제거될 때마다 자동으로 조정되는 동적 배열
인덱스 접근 : 특정 위치의 요소에 빠르게 접근할 수 있음
순서 유지 : 요소를 추가한 순서ㅐ로 요소를 저장하므로, 요소의 순서를 유지
중복 허용 : 동일한 요소를 여러 번 포함할 수 있음
Null 요소 허용 : null 요소를 허용함
스레드 안전 : 모든 메서드는 동기화되어 있어 여러 스레드가 동시에 Vector를 수정하는 경우에도 데이터의 일관성이 유지함
여러 스레드가 동시에 데이터를 수정해야 하는 병렬 처리 상황에서 매우 유용함 하지만, 동기화는 성능을 저하시킬 수 있으므로, 단일 스레드 환경에서는 ArrayList를 사용하는 것이 더 효율적일 수 있음
Arraylist와 Vector의 차이점
한 데이터에 동시접속이 발생했을 때 처리가 가능한 기능이 있나 없나의 차이점
동시 접속을 고려하여 만들어진 리스트가 Vector이다
Arraylist는 동시접속을 고려안하고 가볍다는 장점이 있다.
3) Linkedlist
양방향 포인터 구조로 데이터의 삽입, 삭제가 빈번할 경우 빠른 성능 보장
스택, 큐, 양방향 큐 등을 만들기 위한 용도로 쓰임
lterator 사용
노드가 다음 노드와 이전 노드를 참조하는 방식으로 데이터 저장
각 요소가 이전 요소와 다음 요소의 정보를 가지고 있는 것이 “연결 리스트”의 특정
Linkedlist 특징
동적 크기 : 요소가 추가되거나 제거될 대마다 자동으로 크기 조정됨
요소의 삽입 및 삭제 효율성 : 중간에 요소를 삽입하거나 삭제하는 것이 매우 효율적, 노드 간의 연결만 변경하면 되기 때문
순서 유지 : 요소를 추가한 순서대로 요소를 저장하므로, 요소의 순서를 유지함
중복 허용 : 동일한 요소를 여러 번 포함함
Null 요소 허용 : null 요소를 허용함Iterator 추출 전용 인터페이스
데이터를 추출하기 위한 데이터 임시 저장공간
주로 순서가 없는 자료구조의 값들을 추출할 때 사용
보통 hasNext와 next 메소드를 이용한 while문으로 값을 추출한다.
LinkedList는 인덱스를 이용한 빠른 접근이 상대적으로 느림 특정 위치의 요소를 찾기 위해서는 처음 또는 끝에서부터 해당 위치까지 순차적으로 이동해야하기 때문 LinkedList는 자주 요소의 삽입이나 삭제가 발생하고, 인덱스를 이용한 접근이 빈번하지 않은 상황에서 효율적으로 사용할 수 있음
linked 특성상 항상 처음부터 같은 경로를 반복적으로 지나면서 데이터의 위치를 검색해야하기 때문에 마지막으로 접근한 데이터를