ArrayList는 배열을 리스트로 관리하면서 삽입/삭제가 많을 때 유용함.
ArrayList는 동적 배열이므로 크기가 고정되어있지 않음.
1. 빠른 조회 : ArrayList는 내부적으로 배열을 사용하므로 O(1) 시간 복잡도로 요소를 조회함
2. 느린 삽입, 삭제 : 중간에 요소를 추가하거나 삭제할 때 O(n) 연산이 필요 (배열의 요소들을 이동해야 함)
3. 인덱스를 통한 접근 가능 : 배열처럼 get(index), set(index, value)로 요소에 접근 가능
List<String> list = new ArrayList<>();
list.add("Apple");
list.add("Banana");
list.add("Cherry");
list.add(1, "Grape"); // 인덱스 1에 "Grape" 삽입
System.out.println(list); // Apple, Grape, Banana, Cherry]
System.out.println("ArrayList 크기: " + list.size()); // 3
❗주의 : 중간에 삽입하면 (add(index, element)) 뒤의 모든 요소가 한 칸씩 밀려야 하므로 O(n) 연산이 발생함.
배열 끝에 추가하는 add(element)의 경우 평균 O(1) 연산 발생.
list.length 같은 속성은 존재하지 않음! (ArrayList는 동적 배열이므로 크기가 고정되지 않음)
list.isEmpty()는 size() == 0과 같은 역할을 하므로 가독성이 좋음!
list.remove(1); // 인덱스 1의 요소(Grape) 삭제
System.out.println(list); // 출력: [Apple, Banana, Cherry]
중간 요소 삭제 시 remove(index) 뒤의 요소들이 한 칸씩 앞으로 당겨지므로 O(n) 연산 발생.
요소를 추가/삭제할 때마다 size() 값이 변함.
import java.util.ArrayList;
import java.util.List;
public class Main {
public static void main(String[] args) {
// 문자 리스트 생성
List<Character> charList = new ArrayList<>();
charList.add('a');
charList.add('b');
charList.add('c');
// 문자 변경 (2번째 요소 'b' → 'z')
charList.set(1, 'z'); // set(인덱스, 새로운 값)
// 결과 출력
System.out.println(charList); // [a, z, c]
}
}
set(index, newValue)를 사용하면 특정 위치의 문자를 변경 가능
특정 위치의 값을 덮어쓰기 하는 것이므로 O(1) 연산.
charList[1] = 'z'; 이런 방식은 사용 불가능 (ArrayList는 [] 인덱스 접근을 지원하지 않음)
if (charList.contains('a')) {
int index = charList.indexOf('a');
charList.set(index, 'x'); // 'a'를 'x'로 변경
}
System.out.println(charList); // [x, z, c]
특정 문자가 있는지 확인 후 변경하려면 contains() + indexOf() 활용
contains(element)도 요소를 하나씩 순차적으로 찾으므로 O(n)
for (int i = 0; i < charList.size(); i++) {
if (charList.get(i) == 'c') {
charList.set(i, 'y'); // 'c'를 'y'로 변경
}
}
System.out.println(charList); // [x, z, y]
for (Character c : charList) {
System.out.print(c + " "); // 출력: a z c
}
ListIterator<Character> iterator = charList.listIterator();
while (iterator.hasNext()) {
if (iterator.next() == 'c') {
iterator.set('y'); // 'c'를 'y'로 변경
}
}
System.out.println(charList); // 출력: [a, z, y]
list.forEach(fruit -> System.out.println(fruit));
list.clear();
https://velog.io/@seha01130/JAVA-ArrayList-정렬하기
https://velog.io/@seha01130/LinkedList-메소드-정리

조회(읽기)가 많은 경우 → ArrayList가 더 좋음
삽입/삭제가 많은 경우 → LinkedList가 더 좋음
일반적인 리스트 사용에서는 ArrayList가 기본적으로 가장 많이 사용됨