본문 바로가기

Programming/Data Structure

List 리스트 자료구조란? (ArrayList, LinkedList, Vector, Stack)

반응형

List

- List Interface는 대표적인 선형자료구조다.

- 우리가 보통 알고 있는 고정값을 주는 배열구조는 선언한 배열의 크기 이상으로 나아가면 IndexOutofBoundExcpetion이라는 예외가 뜬다.

- 이를 보완하여 나온 것이 List interface를 통해 구현된 클래스들이다.

- 이들은 동적 크기를 가지고 배열처럼 사용할 수 있게 되어있다.

 

List Interface를 구현하는 클래스

1. ArrayList

2. LinkedList

3. Vector (+Vector를 상속받은 Stack)

 

 

List Interface의 대표적인 메소드

 

 

ArrayList

- Object[] 배열을 사용하여 primitive 배열 (int[])와 유사한 형태라고 볼 수 있지만, 동적으로 관리되는 배열이다.

- 최상위 타입인 Object 타입으로 배열을 생성하기 때문에 요소 접근 측면에서는 탁월하지만, 중간에 요소가 삽입되거나 삭제가 필요할 때는 요소를 한 칸씩 밀어야 하므로, 비효율적이다.

 

객체 생성 방법

// 방법 1
ArrayList<T> arraylist = new ArrayList<>();

// 방법 2
List<T> arraylist = new ArrayList<>();

ArrayList는 List를 상속받고 있기 때문에. 2번째 방법으로도 객체 생성이 가능하다.

 

LinkedList

- 데이터(item)와 주소로 이루어진 클래스를 만들어서 서로 연결하는 방식이다.

- 데이터와 주소로 이루어진 클래스를 노드(Node)라고 한다.

- 노드들은 이전 노드와 이후 노드와 기차처럼 연결되어 있다.(이중 연결 리스트)

- 모두 연결되어 있다보니, 요소를 검색해야 할 때 노드를 모두 방문하여 성능은 떨어진다.

- 하지만, 중간에 노드를 삭제하거나 삽입해야 할 때는 링크를 끊어 새로 연결만 해주면 되므로 좋은 효율을 보인다.

 

// 방법 1
LinkedList<T> linkedlist = new LinkedList<>();

// 방법 2
List<T> linkedlist = new LinkedList<>();

 

 

Vector

- 기본적으로 ArrayList 와 같다.

- Object[] 배열 사용으로 요소 접근에 용이하다.

- ArrayList보다는 성능이 약간 느리다.

 

// 방법 1
Vector<T> vector = new Vector<>();

// 방법 2
List<T> vector = new Vector<>();

 

Stack

- Stack은 Vector 클래스를 상속받고 있어서 거의 같다.

// 방법 1
Stack<T> stack = new Stack<>();

// 방법 2
List<T> stack = new Stack<>();

// 방법 3
// Stack은 Vector를 상속하기 때문에 아래와 같이 생성할 수 있다.
Vector<T> stack = new Stack<>();

 

 

자바 컬렉션 프레임워크

자료구조와 알고리즘 - 알고리즘을 선택할 때, 자료구조를 알고 있는 것이 상당히 도움이 된다. - LinkedList : 순서가 있는 데이터에서 삽입과 삭제가 빈번하게 발생할 때 - ArrayList : 그렇지 않을 때

mrlazydev.tistory.com

 

반응형