LinkedList
📚참고
컬렉션 프레임워크와 핵심 인터페이스
배열의 장단점
장점
- 구조가 간단하고 데이터를 읽는데 걸리는 시간(access time)이 짧다.
- 배열은 연속적이기 때문에 요소의 주소값을 찾아내는게 빠르다.
단점
- 런타임 시, 크기를 변경할 수 없다.
- 크기를 변경해야 하는 경우, 새로운 배열을 생성 후 데이터를 복사해야한다.
- 1. 더 큰 배열 생성
- 2. 값 복사
- 3. 참조변수 값 변경
- 크기 변경을 피하기 위해 큰 배열을 생성하면 메모리가 낭비
- 런타임 중 배열의 크기 변경은 불가하므로 배열길이를 잘 지정해줘야함 (보통 2배)
- 비순차적인 데이터의 추가/삭제에 시간이 많이 걸린다.
- 데이터를 추가/삭제하기 위해, 다른 데이터를 옮겨야 한다.
- 그러나 데이터를 순차적으로 끝에 추가, 끝부터 삭제하는 것은 빠르다.
LinkedList
- 배열의 단점을 보완
- 배열과 달리 불연속적으로 존재하는 데이터를 연결
- 데이터의 삭제
- 단 한 번의 참조변경만으로 가능하다.
class Node {
Node next; // 다음노드
Object obj; // 데이터
}
- 데이터의 추가
- [ 1번의 Node 객체 생성 + 2번의 참조변경 ] 만으로 가능
- 단점
- 데이터 접근성이 나쁨
- 배열은 연속적이여서 한번에 이동이 가능하나 링크드리스트는 데이터를 한번에 찾아가는 것이 안 된다.
- 또한 링크드리스트의 노드는 뒷 요소의 참조값만 갖고 있기 때문에 앞 요소를 찾아가지 못한다.
- 이를 보완하기 위한 컬렉션 클래스가 더블리 링크드 리스트(doubly linked list)
Doubly Linked List
- 이중 연결 리스트
- 링크드리스트의 단점을 보완
- 앞뒤 노드의 참조값을 가지고 있어 접근성이 향상
- 그러나 한번에 이동하는 것은 여전히 불가하고 앞뒤로 이동만 가능하다.
class Node {
Node next; // 다음노드
Node previous; // 이전노드
Object obj; // 데이터
}
Doubly Circular Linked List
- 이중 원형 연결 리스트
- 맨 앞 노드에는 맨 뒷 노드의 참조값을, 맨 뒷 노드에는 맨 앞 노드의 참조값을 저장한다.
ArrayList vs LinkedList 성능 비교
- 순차적으로 데이터 추가/삭제 : ArrayList가 빠름
- 비순차적으로 데이터 추가/삭제 : LinkedList가 빠름
- 접근시간 : ArrayList가 빠름
- 인덱스가 n인 데이터의 주소 = 배열의 주소 + n * 데이터 타입의 크기
컬렉션 | 읽기 (접근시간) | 데이터 추가/삭제 | 비고 |
ArrayList | 빠르다. | 느리다. | 순차적인 추가/삭제는 빠름 비효율적인 메모리 사용 |
LinkedList | 느리다. | 빠르다. | 데이터가 많을수록 접근성이 떨어짐 (한번에 이동이 불가) |
'JAVA > 컬렉션 프레임워크' 카테고리의 다른 글
Set (0) | 2021.06.15 |
---|---|
Comparator & Comparable (0) | 2021.06.01 |
Arrays (0) | 2021.05.31 |
Iterator (0) | 2021.05.18 |
컬렉션 프레임워크 (Collection Framework) (0) | 2021.05.02 |
댓글
이 글 공유하기
다른 글
-
Comparator & Comparable
Comparator & Comparable
2021.06.01 -
Arrays
Arrays
2021.05.31 -
Iterator
Iterator
2021.05.18 -
컬렉션 프레임워크 (Collection Framework)
컬렉션 프레임워크 (Collection Framework)
2021.05.02