728x90
1. Array / ArrauyList / LinkedList 특징 요약
Array | ArrayList | LinkedList | |
공통점 | 1. 원소의 중복을 허용하고 순서를 유지한다. 2. 인덱스를 이용해 원소들을 관리한다. |
||
차이점 | 1. Array의 length와 data type을 함께 선언한다. (고정적) 2. length를 미리 설정했기 때문에 해당 인덱스에 값을 넣지 않을 경우 타입별로 선언된 default 값으로 return 한다. (아래 결과값 참고) |
1. 데이터 조회(get()) -> Index로 조회를 해서 속도가 빠르다. 2. 데이터 삽입(add())과 삭제(remove()) -> 원하는 index에 add()와 remove()를 할 수 있지만, index를 지정을 하면 나머지 원소들이 움직여야한다. (데이터 양이 많고, add()나 remove()가 빈번하다면 비효율적일 수 있다.) |
1. 데이터 조회(get()) -> LinkedList는 순차적 접근이여서 조회 속도가 느리다. 2. 데이터 삽입(add())과 삭제(remove()) -> 한 노드에 연결된 노드의 포인터 위치를 가르킨다. (단일은 뒤에 원소만, 다중은 앞뒤 원소 둘다.) ArrayList와 동일하게 원하는 index에 add()와 remove()를 할 수 있고, 차이점은 원소의 이동이 아닌 앞 원소나 뒷 원소의 노드를 연결만 시켜주면 되서 빠르다. |
2. 참고
1) Array
public static void main(String[] args) {
//1. array 초기화(length 설정)
int arr[] = new int[4];
arr[0] = 90;
arr[2] = 80;
//2. 값을 넣어주지 않을 경우 default 값으로 설정 됨.
//int, float, char, String, Double, Integer 등 각각 default 값은 다름.
//클래스타입은 null로, 기본형은 0(int), 0.0(float), 공백(char)으로 return
System.out.println("arr[0] ---> " + arr[0]);
System.out.println("arr[1] ---> " + arr[1]);
System.out.println("arr[2] ---> " + arr[2]);
System.out.println("arr[3] ---> " + arr[3]);
}
실행 값
1-1) int (0 리턴)
1-2) String (null 리턴)
1-3) Double (null 리턴)
1-4) float (0.0 리턴)
1-5) Integer (null 리턴)
1-6) char (공백 리턴)
2) ArrayList
- ArrayList는 동적으로 사이즈가 늘어나지만, 실제로는 사이즈를 고정적으로 놓고, 데이터 add시 사이즈를 늘려주는 연산이 추가가 된다. (remove시에는 빈 인덱스를 채워주는 연산을 하게 된다.) 그래서 데이터양이 많고 add나 remove가 빈번한 경우에는 비효율적 일 수 있다.
3) LinkedList
- LinkedList는 ArrayList와 동일하게 동적으로 사이즈가 늘어나지만, 데이터 add나 remove시 사이즈를 늘려주는 연산이 없어서 add나 remove가 수월하다. add나 remove 작업이 일어났을 경우 앞 뒤 노드의 주소만 연결시켜주면 되기 때문이다.
그러나 get을 하게되면 순차접근으로 ArrayList보다 오래 걸린다.
참고 링크
'CS > 자료구조' 카테고리의 다른 글
[자료구조] Set (Java) & HashSet이 정렬이 되는 이유 (0) | 2024.07.27 |
---|---|
[자료구조] 트라이(Trie) (0) | 2024.07.19 |
[자료구조] B-Tree와 B+Tree의 질문 (1) | 2024.07.14 |
[자료구조] B-Tree란? (1) | 2024.07.13 |
[자료구조] 메모리관리 - 스택(Stack) 힙(Heap) (0) | 2023.04.01 |