본문 바로가기

Java

ArrayList, LinkedList

출처 - Java의 정석 기초편 (남궁 성)

 

 

1. ArrayList

- List인터페이스를 구현: 순서 O, 중복 O

- 배열 기반: 데이터 저장공간으로 배열 사용

- 기존 Vector 개선: 구현원리와 기능적인 면 동일, Vector는 자체 동기화 가능

 

ArrayList() // 기본 생성자(크기 0)
ArrayList(Collection c)
ArrayList(int initialcapacity) // 초기용량, 배열의 길이 지정
boolean add(Object o) // 마지막에 객체 추가
void add(int index, Object element)
boolean addAll(Collection c)
boolean addAll(int index, Collection c)
void clear() // 모든 객체 삭제
Object clone() // 복제
boolean contains(Object o) // 지정된 객체 포함되어 있는지
void ensureCapacity(int minCapacity)
Object get(int index) // 지정된 위치 객체 반환
int indexOf(Object o) // 순방향, 못찾으면 -1 반환
int lastIndexOf(Object o) // 역방향
boolean isEmpty()
Iterator iterator()
ListIterator listIterator()
ListIterator listIterator(int index) // 지정된 위치부터 시작하는 ListIterator 반환
Object remove(int index)
boolean remove(Object o)
boolean removeAll(Collection c) // 지정한 컬렉션에 저장된 것과 동일한 객체들 삭제
boolean retainAll(collection c)
Object set(int index, Object element) // 객체 변경(치환)
int size()
void sort(Comparator c) // 정렬
List subList(int fromIndex, int toIndex) // 일부 뽑아 새로운 List 생성
Object[] toArray()
Object[] toArray(Object[] a)
void trimToSize() // 공백 제거

 

 

2. ArrayList 추가, 삭제

① 삭제할 데이터의 아래의 데이터 한 칸씩 위로 복사해 덮어씀

② 마지막 데이터는 null로 변경: data[size-1]=null;

③ 데이터의 개수(size)의 값 1 감소: size--;

- 첫 번째 객체부터 삭제시 배열 복사 발생: 다 지워지지 않고 저성능

- 마지막 객체부터 삭제시 배열 복사 발생 안 함: 다 지워지고 고성능

 

 

3. LinkedList

- 배열 장점: 간단한 구조, 데이터를 읽는데 걸리는 시간(접근 시간, acess time)이 빠름

- 배열 단점: 크기 변경 불가(새로운 배열 생성→데이터 복사→참조 변경)로 큰 배열 생성시 메모리 낭비, 비순차적인 데이터 추가, 삭제시 느림

- 연결 기반: 배열의 단점 보완→불연속적으로 존재하는 데이터를 연결(link)→변경 유리

- 자신과 연결된 다음 요소의 참조(주소값), 데이터

- 링크드 리스트: 연결 리스트, 단계 이동→데이터 접근성 나쁨

- 더블리 링크드 리스트: 이중 연결 리스트, 참조 2개(다음 요소, 이전 요소)→접근성 향상

- 더블리 써큘러 링크드 리스트: 이중 원형 연결 리스트→맨 끝 이동

 

class Node {
    Node next; // 다음 요소의 주소 저장
    Object obj; // 데이터 저장
}

 

 

4. LinkedList 추가, 삭제

- 삭제: 한 번의 참조변경

- 추가: 한 번의 Node객체 생성과 두 번의 참조변경

 

 

5. ArrayList와 LinkedList

- ArrayList(연속적): 순차적으로 데이터 추가/삭제 빠름

- LinkedList(불연속적): 비순차적으로 데이터 추가/삭제 빠름

- 접근 시간: ArrayList가 빠름

- 인덱스가 n인 데이터의 주소 = 배열의 주소 + n * 데이터 타입의 크기

 

 

 

'Java' 카테고리의 다른 글

Iterator  (0) 2022.10.28
스택(Stack), 큐(Queue)  (0) 2022.10.28
컬렉션 프레임웍(collections framework)  (0) 2022.10.27
형식화 클래스(DecimalFormat, SimpleDateFormat)  (0) 2022.10.26
날짜와 시간  (0) 2022.10.25