목차
- 배열의 장단점
- LinkedList 특징
- LinkedList 종류
- ArrayList vs LinkedList 성능비교
배열의 장단점
장점
배열은 구조가 간단하고 데이터를 읽는 데 걸리는 시간(접근시간, access time)이 짧다.
놀랍게도 배열의 첫 번째 요소를 읽는 시간과 마지막 요소를 읽는 시간은 똑같다.
인덱스가 n인 데이터의 주소 = 배열의 주소 + n * 데이터의 크기
단점
1. 크기를 변경할 수 없다.
- 크기를 변경해야 하는 경우 새로운 배열을 생성 후 데이터를 복사해야 함.
- 그렇다고 크기의 변경을 피하기 위해 충분히 큰 배열을 생성하면, 메모리가 낭비됨.
- 더 큰 배열을 만든다.
- 기존 내용 복사
- 참조를 변경해야 한다.
2. 비순차적인 데이터의 추가, 삭제에 시간이 많이 걸린다.
- 배열 중간에 있는 데이터를 추가, 삭제 할 때 뒤에 있는 다른 데이터의 자리를 옮겨야 하기 때문에
그러나 순차적인 데이터 추가(끝에 추가)와 삭제(끝부터 삭제)는 빠르다.
- 데이터 이동이 없기 때문에
LinkedList - 배열의 단점을 보완
- 배열과 달리 링크드 리스트는 불연속적으로 존재하는 데이터를 연결(link)
- 불연속적으로 존재하는 각 요소를 노드라고 불름.
- 하나의 개별요소(노드)를 연결해놨기 떄문에 변경에 유리하다는 장점이 있다.
- 노드에는 다음노드(참조변수)와 데이터(배열의 데이터)를 가지고 있음.
class Node {
Node next; // 다음 노드의 참조값
Object obj; // 데이터
}
데이터의 삭제: 단 한 번의 참조변경만으로 가능(다음 노드 참조변수의 값을 바꿈)
데이터의 삽입: 한 번의 Node 객체생성과 두번의 참조변경만으로 가능
LinkedList - 이중 연결 리스트
링크드 리스트(linked list): 연결리스트, 데이터 접근성이 나쁨(불연속적)
한번에 못간다. 왜냐하면 N번째 요소는 다음번 째 요소의 참조주소만 알고 있기 때문이다.
그래서 배열처럼 한번에 이동이 불가능하다. 징검다리처럼 한 다리 한 다리씩 건너야 한다.
더블리 링크드 리스트(doubly linked list): 이중 연결리스트, 접근성 향상
앞 뒤로 이동을 할 수 있어 좀 더 접근성이 향상 되었다.
대신 추가하거나, 삭제할 때도 두개씩 참조변경 해줘야한다.
한번에 두,세 개씩 뛰어넘진 못한다.
class Node {
Node next; // 다음 노드의 참조값
Node previous; // 앞 노드 참조값
Object obj; // 데이터
}
더블리 써큘러 링크드 리스트(doubly circular linked list): 이중 원형 연결리스트
첫 요소가 이전 요소로 가면 맨 끝 요소까지 한 번에 갈 수 있게 되었다.
(CH.1 에서 채널을 내리면 CH.999)
참고: 실제 자바에서는 이중 연결 리스트로 되어있다. 여전히 베열에 비해서는 접근성이 나쁘다.
ArrayList(배열기반) vs LinkedList (연결 기반) 성능비교
1. 순차적으로 데이터를 추가/삭제: ArrayList가 빠름
2. 비순차적으로 데이터를 추가/삭제: LinkedList가 빠름
3. 접근시간(access time): ArrayList가 빠름
'Java' 카테고리의 다른 글
[Java] Iterator, Listlterator, Enumeration (0) | 2024.05.07 |
---|---|
[Java] Stack과 Queue (0) | 2024.05.07 |
[Java] 컬렉션 프레임워크, ArrayList (0) | 2024.05.05 |
[Java] Arrays로 배열 다루기 (0) | 2024.05.02 |
[Java 복습] 추상 클래스, 인터페이스 (0) | 2024.05.01 |