[Java] ArrayList

coldrice99·2024년 8월 8일
0

ArrayList

ArrayList는 자바의 컬렉션 프레임워크 중 하나로, 크기가 동적으로 조정되는 배열이다. ArrayListjava.util 패키지에 포함되어 있으며, 요소를 추가하거나 제거할 때 자동으로 크기가 조절된다.

특징

  1. 동적 크기 조절: ArrayList는 요소를 추가하거나 제거할 때 자동으로 크기가 조절된다. 따라서 배열처럼 크기를 미리 지정할 필요가 없다.

  2. 유연한 사용: ArrayList는 요소의 삽입, 삭제, 검색이 용이하다. 인덱스를 사용하여 특정 요소에 접근할 수 있으며, 컬렉션 프레임워크의 다양한 메서드를 사용할 수 있다.

  3. 성능:

    • 읽기/쓰기 속도: 인덱스를 사용한 요소 접근은 O(1)의 시간 복잡도를 가지므로 매우 빠르다.
    • 삽입/삭제 속도: 배열의 중간에 요소를 삽입하거나 삭제할 때는 요소를 이동해야 하므로 O(n)의 시간 복잡도를 가진다.

주요 메서드

  1. add(E e): 요소를 리스트의 끝에 추가한다.

    ArrayList<String> list = new ArrayList<>();
    list.add("Apple");
    list.add("Banana");
  2. add(int index, E element): 지정한 위치에 요소를 삽입한다.

    list.add(1, "Cherry"); // Banana 앞에 Cherry를 삽입
  3. get(int index): 지정한 위치의 요소를 반환한다.

    String fruit = list.get(1); // Cherry를 반환
  4. remove(int index): 지정한 위치의 요소를 제거한다.

    list.remove(1); // Cherry를 제거
  5. size(): 리스트의 크기를 반환한다.

    int size = list.size(); // 리스트의 크기를 반환
  6. clear(): 리스트의 모든 요소를 제거한다.

    list.clear(); // 리스트를 비운다

예제 코드

다음은 ArrayList를 사용하여 나누어 떨어지는 숫자 배열 문제를 해결하는 예제 코드이다.

import java.util.ArrayList;
import java.util.Collections;

class Solution {
    public int[] solution(int[] arr, int divisor) {
        ArrayList<Integer> tempList = new ArrayList<>();
        
        for (int value : arr) {
            if (value % divisor == 0) {
                tempList.add(value);
            }
        }
        
        if (tempList.isEmpty()) {
            return new int[]{-1};
        }
        
        Collections.sort(tempList);
        
        // ArrayList를 배열로 변환
        int[] answer = new int[tempList.size()];
        for (int i = 0; i < tempList.size(); i++) {
            answer[i] = tempList.get(i);
        }
        
        return answer;
    }
}

코드 설명

  1. ArrayList 초기화:

    ArrayList<Integer> tempList = new ArrayList<>();
    • ArrayList를 초기화하여 나누어 떨어지는 숫자를 저장할 리스트를 생성한다.
  2. 값 추가:

    for (int value : arr) {
        if (value % divisor == 0) {
            tempList.add(value);
        }
    }
    • 배열을 순회하면서 divisor로 나누어 떨어지는 값을 tempList에 추가한다.
  3. 예외 처리:

    if (tempList.isEmpty()) {
        return new int[]{-1};
    }
    • 나누어 떨어지는 값이 하나도 없을 경우, -1이 포함된 배열을 반환한다.
  4. 정렬:

    Collections.sort(tempList);
    • ArrayList를 오름차순으로 정렬한다.
  5. 배열로 변환:

    int[] answer = new int[tempList.size()];
    for (int i = 0; i < tempList.size(); i++) {
        answer[i] = tempList.get(i);
    }
    • ArrayList를 배열로 변환하여 반환한다.

결론

특히 내가 잘못 알았던 것은 ArrayList가 배열이 아님에도 불구하고 배열처럼 사용하려 했다는 것이다. ArrayList는 내부적으로 배열을 사용하지만, 크기가 동적으로 조정되고 다양한 메서드를 통해 유연하게 요소를 추가, 삭제, 접근할 수 있다.


profile
서두르지 않으나 쉬지 않고

0개의 댓글