Array
인접한 메모리에 원소들을 일렬로 저장하는 데이터 구조
특징
인접한 메모리 위치에 동일한 유형의 여러 데이터들을 함께 저장하는 방식
배열의 첫 번째 요소는 일반적으로 배열 이름이다.
배열의 첫 번째 요소가 있는 메모리 위치에 오프셋을 추가하여 쉽게 각 요소의 위치를 계산할 수 있다.
배열 생성 시 적절한 크기의 메모리 공간에 정적으로 할당해주기 때문에, 해당 메모리 공간의 다음 부분이 비어있는지 확신할 수 없다. 따라서 배열의 크기를 변경할 수 없도록 한다.
데이터가 연속적으로 저장되어 있으므로 공간 지역성 덕분에 캐시 메모리에 저장 시 높은 Cache Hit Rate를 가질 수 있다.
삽입과 삭제의 경우 O(N)의 시간 복잡도를 갖는다.
원소에 접근할 때는 O(1)의 시간 복잡도를 갖는다.

자바의 배열
리스트와 달리 primitive 타입, 객체 타입 모두 배열로 선언 가능하다.
ex)
Integer[] arr = new Integer[100]; int[] arr = new int[100];
배열 기본 동작
// 선언
// 직접 원소를 넣은 채로 선언하거나, 배열의 길이만 먼저 선언할 수 있다.
int[] odds = {1, 3, 5, 7, 9};
String[] weeks = new String[7];
// 값 설정
weeks[1] = "Monday";
// 값 접근 (인덱스 기반만 가능)
System.out.println(weeks[5]);
// 배열 길이 조회
System.out.println(odds.length);
// 배열 내용 채우기(덮어쓰기)
Arrays.fill(odds, Integer.MIN_VALUE);
배열 정렬
// 오름차순 정렬
Arrays.sort(arr);
System.out.println(Arrays.toString(arr)); // [0,1,2,3,4]
// 내림차순 정렬
Arrays.sort(arr, Collections.reverseOrder());
배열 비교
boolean isSame = Arrays.equals(arr1, arr2);
배열 <-> 리스트
// 배열 -> 리스트
String[] arr = {"a", "b", "c"};
Arrays.asList(arr);
// 리스트 -> 배열
List<Integer> list = new ArrayList<>();
int[] arr = list.stream().mapToInt(Integer::intValue).toArray();
List<String> list = new ArrayList<>();
String[] arr = list.toArray(new String[list.size()]);
Last updated