1125 words
6 minutes
[Java]ArrayList

Array#

배열의 인덱스#

  • 크기가 고정되어 있어, 크기를 변경할 수 없다.
  • 기본적으로 메모리에 순서대로 붙어있어 인덱스를 사용하여 빠르게 접근할 수 있다.
  • 배열에서 인덱스를 사용해 데이터를 찾을 경우.시작 인덱스에서 byte size와 인덱스 번호를 곱해 타겟 데이터가 위치한 메모리 접근 주소를 o(1) 시간에 찾을 수 있다.
  • 인덱스를 사용할 경우 한번의 연산만 필요하므로 데이터 크기에 상관없이 o(1) 시간이 걸린다.
  • 인덱스를 사용하지 않고 데이터를 찾을 경우, 처음부터 끝까지 탐색해야 하므로 o(n) 시간이 걸린다.

Concept

  • 배열 : Array. 배열은 연속적인 메모리 공간에 저장되는 자료구조이다. 배열은 Heap 영역에 저장되며 같은 데이터 타입만 저장할 수 있다.

Case

배열에 데이터 추가#

직접 인덱스를 지정하여 데이터를 추가할 수 있다.

배열에 데이터를 추가할 때 인덱스 위치에 따른 성능 차이#

  • 첫번째 위치에 데이터를 추가할 경우, 배열의 모든 데이터를 한칸씩 뒤로 밀어야 하므로 o(n) 시간이 걸린다.
  • 중간 위치에 데이터를 추가할 경우, 추가할 위치부터 끝까지 데이터를 한칸씩 뒤로 밀어야 하므로 o(n) 시간이 걸린다.
  • 마지막 위치에 데이터를 추가할 경우, 마지막 인덱스에 접근해서 데이터를 추가하면 되므로 o(1) 시간이 걸린다.

배열의 정적인 특성#

배열은 크기가 고정되어 있어, 크기를 변경할 수 없다.

기본 배열의 크기는 10이다. 만약 배열의 크기를 늘리고 싶다면, 새로운 배열을 만들어 기존 배열의 데이터를 복사해야 한다.

배열 메소드#

몇가지 배열 메소드


Methods

  • Array.Copyof : size 크기의 배열을 새로 생성 . Arrays.copyof(el, size)

배열 용법#

배열 역순으로 순회하기

// reverse traversal in java private static void addAtIndex(int[] arr, int idx, int value) { for (int i = arr.length-1; i> idx; i--) { arr[i] = arr[i-1]; } arr[idx] = value; } private static void addFirst(int[] arr, int newVal) { for(int i=arr.length -1 ; i > 0; i--) { arr[i] = arr[i-1]; // left value to right } }

ArrayList#


Concept

  • ArrayList : ArrayList는 Java에서 제공하는 가변 길이 배열 구현체다. 중복을 허용하고 순서가 유지되며 데이터를 중간에 추가하거나 삭제할 수 있다. 내부적으로 크기가 자동으로 관리되는 Object 배열을 가진다. 기본적으로 순서를 유지해야 하기 때문에 데이터의 삽입 삭제가 빈번할 경우 성능이 저하될 수 있다.

  • ArrayList는 크기가 가변적인 배열이다. 순서가 존재하고 중복을 허용하며, 데이터를 중간에 추가하거나 삭제할 수 있다.
  • 데이터의 고정크기가 존재하며 이를 초과한 값이 들어올 경우 기존 capacity를 2배나 1.5배로 늘린 새로운 배열에 기존 배열의 값을 복사한다.
  • 기존 배열은 가비지 컬렉션의 대상이 된다.

ArrayList Methods#

  • add : 데이터 추가
  • remove : 데이터 삭제
  • get : 데이터 조회
  • size : 데이터 크기
  • indexOf : 데이터 위치 조회

ArrayList Big 5#

  • 첫번째, 마지막 데이터 추가 및 삭제 : o(1)
  • 중간 데이터 추가 및 삭제 : o(n)

Takeaway#


Key Takeaway

  • ArrayList는 가변 데이터, 순서를 유지해야 하는 데이터에 대해 보다 효율적으로 사용할 수 있다.
  • 사용 사례: 이벤트 로그, 동적 입력 저장, 필터링 및 정렬