[Java] Array, List 비교

예원·2023년 1월 2일
1

Java 글 모아보기

목록 보기
3/6

Array

동일한 타입의 연관된 데이터를 메모리에 연속적으로 저장하여 하나의 변수에서 묶어서 관리하기 위한 자료구조이다.

배열은 index(식별자)와 값으로 구성된다.

int[] intArray = {1,2,3};

배열의 크기는 초기에 정의한 뒤 변경할 수 없다.

int[] intArray = new int[3];

자바에서 배열의 시작은 0번부터 진행된다.

System.out.print(intArray[0]); // 1

만약 데이터가 삭제될 경우, 빈 공간으로 남게 되어 메모리 낭비가 생긴다.

List

배열과 비슷한 자바의 자료형이나 배열과 차이점이 있다.

리스트는 동적으로 크기 할당이 가능하다.
index(식별자)가 없으므로, 객체가 삭제되면 새로 추가되는 객체가 그 공간을 차지할 수 있다.

리스트는 기본 타입은 담을 수 없고 객체 타입만 가능하다.

ArrayList

자바의 List 종류 중 하나 이다.
이름 그대로 Array(배열)과 List(리스트)의 장점을 합친 것이다.

즉, Index(식별자)의 사용과 동적으로 크기 할당이 가능하다.

ArrayList<String> list = new ArrayList<>();

list.add("1번");
list.add("2번");
list.add("3번");

System.out.print(list.get(0));  // 1번

ArrayList 또한 객체 타입만 가능하다.

배열에서는 중간의 객체가 삭제되면 빈 공간으로 남아 있었지만, ArrayList는 삭제된 후 객체들을 앞으로 이동 시킨다. 중간에 추가 됐을 경우에는 뒤로 이동 시킨다.

객체가 삽입, 삭제될 때 마다 데이터가 이동하므로 삽입, 삭제에 효율적이진 않다.

다만 데이터 조회, 검색은 빠르다.

LinkedList

자바의 List 종류 중 하나 이다.

Index는 몇 번째 데이터인지 순서를 의미하고 각 객체는 포인터로 다음 객체 주소 값을 가리킨다.

논리적 저장 순서와 물리적 저장 순서가 같지 않다.

LinkedList<Integer> list = new LinkedList<>();

list.addFirst(1);
list.add(2);
list.addLast(3);

list.removeFirst();

System.out.println(list.get(0));  // 2

5번째 데이터를 검색하기 위해서는 1번째 → 2번째 → … → 5번째와 같이 순차적으로 포인터를 따라가야 하므로 복잡도가 O(n)이 발생한다.

객체 삽입, 삭제에는 효율적이다.

데이터를 삽입, 삭제한 다음 변경이 일어난 객체의 앞, 뒤 포인터만 변경해주면 된다.


참고

https://itworldyo.tistory.com/119
https://brownbears.tistory.com/520
https://suzyalrahala.tistory.com/24
https://wikidocs.net/207
https://psychoria.tistory.com/765

0개의 댓글