Array❓
- Array는 같은 타입의 데이터를 연속된 공간에 나열
- 각 데이터에 인덱스(index)를 부여해놓은 자료구조
Array 특징
- 배열은 같은 타입의 데이터만 저장 가능
- 한 번 생성된 배열은 길이를 늘리거나 줄일 수 없음
Array 장점 및 단점
장점
- 빠른 접근: 배열은 인덱스를 사용하기 때문에 인덱스를 알고 있다면 원하는 위치에 O(1)에 접근 가능
- 다차원 배열: 배열은 다차원으로 선언 가능
- 메모리 공간의 효율성: 연속된 메모리 공간에 요소를 저장하므로, 메모리 공간을 효율적으로 사용 가능, 또한 배열의 요소들은 순서대로 저장되기 때문에 캐시 지역성이 좋아 성능 향상에 도움이 됨
단점
- 크기 제한: 배열은 생성할 때 크기를 정하고 후에 변경이 불가함 (크기를 동작으로 제어 불가)
- 삽입과 삭제 비용이 큼: 배열의 중간에 요소를 삽입하려면 해당 위치 이후의 요소들을 모두 이동시키기 때문에 O(n)의 시간 복잡도를 가짐
Array 사용법
Array 선언
int[] intArr = {}; // 값과 사이즈 모두 없는 빈 배열 선언
int[] intArr2 = new int[3]; // 사이즈는 존재하지만 값이 없는 빈 배열
int[] intArr3 = {1, 2, 3, 4, 5}; // 사이즈가 자동 지정된 값이 있는 배열
Array 사용
int[] intArr3 = {1, 2, 3, 4, 5};
int idx3 = intArr3[3]; // 배열의 값 참조
int arrLen = intArr3.length; // 배열의 길이 반환
// 배열의 원소 접근 (for 문)
for(int i = 0; i < arrLen; ++i) {
System.out.println(intArr3[i]);
}
// 배열의 원소 접근 (for each 문)
for(int elem: intArr3) {
System.out.println(elem);
}
ArrayList❓
- Array는 정적인 크기를 가지고 있기 때문에 크기 변경 불가
- 배열의 크기를 동적으로 변경할 수 있도록 Java에서 제공해주는 클래스
ArrayList 특징
- 동적 크기 조정
- ArrayList는 내부적으로 배열을 사용
- 요소를 추가하거나 삭제할 때 필요에 따라 크기를 동적으로 조정
- 크기 제한이 없고, 유연하게 요소를 관리 할 수 있음
- 요소 접근
- 배열과 마찬가지로 인덱스를 사용해 요소 접근 가능
- 인덱스를 사용하여 요소에 빠르게 접근 가능
- 제네릭 타입
- 제네릭을 사용해서 타입 안정성을 제공
- 잘못된 타입의 요소 추가 방지
- 여러 메소드 제공
- ArrayList는 배열을 다루기 위한 여러 메소드를 제공해주기 때문에 다루기가 더 용이함
ArrayList 사용법
ArrayList 선언
import java.util.ArrayList;
List<Integer> list = new ArrayList<>();
ArrayList 값 추가
List<Integer> list = new ArrayList<>();
list.add(1); // list에 1 추가
list.add(2); // list에 2 추가
list.add(3); // list에 3 추가
list.add(1, 15); // 1번째 인덱스 위치에 15 추가
list.set(1, 50); // 1번째 인덱스에 있는 값 50으로 변경
ArrayList 값 삭제
List<Integer> list = new ArrayList<>();
list.remove(); // list의 마지막 요소 삭제
list.remove(0); // list의 0번째 요소 삭제
ArrayList 요소 접근
List<Integer> list = new ArrayList<>();
list.get(0); // 0번째 인덱스에 있는 값 접근
list.indexOf(3) // 3이 저장되어 있는 인덱스 반환
ArrayList 기타 메서드
List<Integer> list = new ArrayList<>();
list.size(); // list의 크기 출력
list.isEmpty(); // list가 비었으면 true, 그렇지 않으면 false 반환
list.contains(1) // list가 1 값을 가지고 있으면 true, 없으면 false 반환
list.clear(); // list에 들어있는 모든 값 초기화
List<Integer> newList = list.subList(1,3); // list의 부분 요소만 이용하여 새로운 배열 생성 (index: 1~2)
Collections.sort(list); // list 오름차순 정렬
Reference
https://hoehen-flug.tistory.com/28
https://junjangsee.github.io/2019/07/25/java/arraylist-Method/