Categories
Tags
AI airflow alias book build clang closure collection commandline config container DB decorator docker draft format functional generic git gradle intellij java JPA k3s k8s kafka kotlin linux loki monitoring msa neovim network nix poetry pointer python reflection shortcut Spring sql system-design testing web zero-copy
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는 가변 데이터, 순서를 유지해야 하는 데이터에 대해 보다 효율적으로 사용할 수 있다.
- 사용 사례: 이벤트 로그, 동적 입력 저장, 필터링 및 정렬