CS/자료구조

[자료구조] Array / ArrayList / LinkedList 특징

Gamii 2023. 3. 31. 21:48
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보다 오래 걸린다.

 

 

 

 

 

 

참고 링크

1. https://www.nextree.co.kr/p6506/