[Java] List

이병수·2024년 1월 16일
0

Java

목록 보기
19/27
post-thumbnail

List


List에 대하여

여러 개의 데이터를 저장할 수 있는 자료형

  • 저장된 요소들의 순서가 있고 데이터에 중복이 가능하며 인덱스(index) 번호에 의해 정렬된다.

  • 배열과 비슷하지만, 크기가 정적이지 않고 동적이다.

  • 따라서 데이터의 추가, 삭제가 용이하다.


List는 인터페이스로 정의되어 있고 ArrayList, LinkedList 등 다양한 구현체가 존재한다.


ArrayList

내부적으로 배열을 사용하여 데이터를 저장하며, 데이터 접근 속도가 빠르다.

  • 해당 배열 안의 데이터를 조회할 때 LinkedList보다 빠르다.

데이터가 꽉 차게 될 경우

  • 배열 안의 데이터가 꽉 차게 된다면 새로운 배열을 만들어서 기존의 내용을 복사하여 넣는다.

  • 새로운 배열이 생성되고 복사하는 과정이 생기기 때문에 그 과정에서 지연이 발생한다.


중간에 삽입 or 삭제가 일어날 경우

  • 배열 중간에 삽입 삭제가 일어날 경우, 배열 내부에 값들이 앞으로 당겨지거나, 뒤로 밀려나게 된다.

  • 이렇게 할 경우, 값들을 일일히 옮겨줘야 하기 때문에 LinkedList보다 느리다는 단점이 있다.



LinkedList

노드(Node)를 사용하여 데이터를 저장하며, 데이터의 추가 삭제가 빈번하게 일어나는 경우 유용하다.

  • Node의 컨셉을 잘 알아야한다!

  • 중간의 삽입 삭제가 일어날 경우, ArrayList보다 LinkedList를 사용하는 것이 좋다.

데이터가 추가되는 경우

  • LinkedList는 데이터를 배열에 저장하는 구조가 아니기 때문에 데이터가 꽉차게 될 일이 없음

  • Node라는 객체에 data를 저장하고, 각 Node끼리 참조값을 가지고 있는 이중 연결 리스트로 구성되어 있다.

  • 따라서 ArrayList와 다르게 특정 값을 찾을 때에는 노드들을 순차적으로 돌아야한다는 단점이 발생한다.


중간에 삽입 or 삭제가 일어날 경우

  • ArrayList와 다르게, Node끼리의 연결을 끊어버리면 된다. (삭제의 경우)

  • 삽입일 경우, 해당 위치의 전, 후의 노드의 연결을 이어붙이면 된다.

  • 따라서, 중간에 삽입 or 삭제가 발생할 경우 참조값을 통해 이용하기 때문에 ArrayList와는 다르게 속도가 빠르다.


참고

profile
백엔드 개발자가 되고 싶어요

0개의 댓글