List Collection에 대해서

2019-09-11

List란?

데이터를 순차적으로 나열해 놓은 자료구조이다.(선형구조)

List

특징

  1. 리스트에서 데이터를 저장하는 단위를 Node라 하고 다음 노드의 주소값을 Pointer라고 한다.
  2. 제일 처음 데이터를 가리켜서 Head라고 한다.
  3. 제일 마지막 데이터를 가리켜서 Tail이라고 한다.

List Collection?

List 인터페이스를 구현한 모든 List 컬렉션 클래스는 배열처럼 “순서”가 있다. 또한 데이터의 중복을 허용한다.

대표적인 클래스는 다음과 같다.

  1. ArrayList
  2. LinkedList
  3. Vector

이 밖에 StackQueue도 있다.


ArrayList 클래스

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

ArrayList 클래스는 가장 많이 사용되는 컬렉션 클래스 중 하나이다.

ArrayList 클래스는 배열을 이용하기 때문에 인덱스를 이용해 배열 요소에 빠르게 접근할 수 가 있다. (조회 기능에 성능이 뛰어남)

하지만 배열의 크기를 변경할 수 없기 때문에, 크기를 늘리기 위해 새로운 배열을 생성하고 데이터를 복사해야 한다. 또한 비순차적인 데이터의 추가 및 삭제에서 기존의 데이터들을 옮겨야 하는 복잡한 과정을 거쳐야 한다.

ArrayList

물론 이 과정은 자동으로 수행되지만, 데이터의 추가 및 삭제 작업에 걸리는 시간이 길어지는 단점이 있다.


Vector 클래스

List<E> list = new Vector<E>();

Vector와 ArrayList 클래스는 매우 유사하다. List 인터페이스를 상속받고, ArrayList 클래스에서 사용할 수 있는 메소드와 거의 같다.

차이점이라면 Vector는 동기화(synchronize) 처리를하고 ArrayList는 그렇지 않다는 것이다.

Vector는 과거에 대용량 처리를 위해 사용했지만, 내부에서 자동으로 동기화처리가 일어나 느리다.

동기화가 필요 없다면 ArrayList를, 동기화 보장이 필요하다면 Vector를 사용하면된다.

하지만 현재는 기존 코드와 호환성을 위해 남아 있고, 동기화 처리가 필요할 때 Collection.synchronizedCollection를 사용하는 것이 성능적으로 더 좋다고 한다.


LinkedList 클래스

List<E> list = new LinkedList<E>();

LinkedList 클래스는 ArrayList 클래스가 배열을 이용해 인덱스를 관리하지만, LinkedList는 인접 참조를 링크해서 체인처럼 관리한다.

Doubly_linked_list

배열은 저장된 요소가 순차적으로 저장되지만, 연결 리스트는 저장된 데이터가 비순차적으로 분포되며 이러한 데이터 사이를 링크로 연결하여 구성한다.

데이터의 삽입, 삭제가 빈번할 경우 데이터의 위치 정보만 수정하면 되기때문에 유용하다. 하지만 데이터가 많은 경우의 검색시 처음 자료부터 순차적으로 찾아 나가야 하기 때문에 느려지는 단점이 있다.


List Interface Method

List 인터페이스는 Collection 인터페이스를 상속받으므로 Collection 인터페이스에서 정의한 메소드도 사용할 수 있다.

List 인터페이스에서 제공하는 주요 메소드는 다음과 같다.

ListMethod


참조

https://gangnam-americano.tistory.com/41 http://tcpschool.com/java/java_collectionFramework_list https://minwan1.github.io/2018/07/03/2018-07-03-collection/ https://seeit.kr/36