배열/ 리스트(LinkedList,ArrayList)

nocarrotrabbit·2022년 10월 18일
0

자료구조 비교

ArrayList vs. Array(배열)

Array는 primivite 타입이나 Object 둘 다 사용 가능하지만

기본형 타입(Primitive type)
총 8가지의 기본형 타입(Primitive type)을 미리 정의하여 제공한다.
기본값이 있기 때문에 Null이 존재하지 않는다.

  • 논리형 boolean
  • 정수형 byte
  • short 2 byte
  • int(기본) 4 byte
  • long 8 byte
  • 실수형 float
  • double(기본) 8 byte
  • 문자형 char

ArrayList는 Object만 사용 가능하다.

Array는 길이 고정이지만 ArrayList는 동적으로 길이를 변경 가능하다.

Array는 ArrayList처럼 다양한 기능을 제공하지 않는다. (addAll, removeAll, iterator 등)

리스트와 관련된 작업을 할때 ArrayList를 사용하는 것이 좋지만 Array를 사용하는것이 좋을 때가 있다.

  • 만약 리스트의 크기가 고정되어 있고, 값을 저장하거나 탐색 용도로만 쓸 경우, primitive 타입일 경우 등이 있다. 다차원 배열을 사용할 때도 [][] 배열을 사용하는게 List<List<>>를 쓰는것보다 쉽다.

배열: 사이즈가 정해져야함

  • 배열의 초기 길이를 지정해야 하며 생성된 배열의 길이는 동적으로 변경할 수 없다는 점 때문에 상황에 맞게 사용해야 한다. 얼마나 많은 데이터를 사용하게 될지 예상하기 힘들 뿐 아니라 가변적으로 리스트의 개수를 늘려야 할 때도 있기 때문

리스트는 그렇지않음

ArrayList

ArrayList는

  • 데이터의 추가, 삭제를 위해 임시 배열을 생성해 데이터를 복사
  • 대량의 자료를 추가/삭제 하는 경우에는 그만큼 데이터의 복사가 많이 일어나게 되어 성능 저하
  • 반면 각 데이터는 인덱스를 가지고 있기 때문에
    한번에 참조가 가능해 데이터의 검색에는 유리한 구현체이다.

LinkedList

LinkedList는 데이터를 저장하는 각 노드가 이전 노드와 다음 노드의 상태만 알고 있다고 보면 된다.

ArrayList와 같이 데이터의 추가, 삭제시 불필요한 데이터의 복사가 없어 데이터의 추가, 삭제시에 유리한 반면 데이터의 검색시에는 처음부터 노드를 순회해야 하기 때문에 성능상 불리하다.

List 함수

  • List 추가: 리스트명.add("값")

  • List 삭제: 리스트명.remove("값");
    리스트명.remove(인덱스)

  • List 값 변경: 리스트명.set(인덱스, "바꿀값");

  • List 크기 확인: 리스트명.size();

  • List에 특정 값 들었는지 확인: 리스트명.contains("값");

  • List가 비었는지 확인: 리스트명.isEmpty();

List 안에 List, Set, 배열 전체 더하기

리스트명.addAll(다른컬렉션명(List, Set..));

  • 배열도 합쳐줄 수 있음
    리스트명.addAll(Arrays.asList(배열명)); -- 배열의 경우

0개의 댓글