1123 words
6 minutes
[Java]ArrayList
01. 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는 가변 데이터, 순서를 유지해야 하는 데이터에 대해 보다 효율적으로 사용할 수 있다.
- 사용 사례: 이벤트 로그, 동적 입력 저장, 필터링 및 정렬