[JAVA] ArrayList 정리

세하·2025년 2월 16일

JAVA

목록 보기
4/17

ArrayList

ArrayList는 배열을 리스트로 관리하면서 삽입/삭제가 많을 때 유용함.
ArrayList는 동적 배열이므로 크기가 고정되어있지 않음.
1. 빠른 조회 : ArrayList는 내부적으로 배열을 사용하므로 O(1) 시간 복잡도로 요소를 조회함
2. 느린 삽입, 삭제 : 중간에 요소를 추가하거나 삭제할 때 O(n) 연산이 필요 (배열의 요소들을 이동해야 함)
3. 인덱스를 통한 접근 가능 : 배열처럼 get(index), set(index, value)로 요소에 접근 가능

메소드

ArrayList 생성, 요소 추가, 길이 구하기

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과 같은 역할을 하므로 가독성이 좋음!

ArrayList 요소 삭제

list.remove(1); // 인덱스 1의 요소(Grape) 삭제

System.out.println(list); // 출력: [Apple, Banana, Cherry]

중간 요소 삭제 시 remove(index) 뒤의 요소들이 한 칸씩 앞으로 당겨지므로 O(n) 연산 발생.
요소를 추가/삭제할 때마다 size() 값이 변함.

ArrayList 문자 변경 방법

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는 [] 인덱스 접근을 지원하지 않음)

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)

ArrayList 반복문을 돌며 요소 가져온 후 변경

  • for문 사용
    size()로 전체 크기를 알 수 있음
    get(i)로 문자를 가져와 set(i, newChar)로 변경 가능
    get(index)는 배열처럼 index로 바로 접근 가능하므로 O(1)
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-each문 사용
    for-each 문은 리스트의 요소를 읽을 때 사용하지만, 값을 변경할 수는 없음
    (for-each 문에서는 set(index, value) 같은 메서드를 사용할 수 없음.)
for (Character c : charList) {
    System.out.print(c + " "); // 출력: a z c
}
  • ListIterator 사용
    for-each 스타일로 값을 변경하고 싶다면, ListIterator를 사용
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));

ArrayList 비우기

list.clear();

ArrayList 정렬

https://velog.io/@seha01130/JAVA-ArrayList-정렬하기

ArrayList VS LinkedList 비교

https://velog.io/@seha01130/LinkedList-메소드-정리

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

0개의 댓글