wanduek 2024. 7. 22. 23:58

Array처럼 크기를 고정하여 생성하는 것을 정적 배열.

ArrayList처럼 크기가 가변적으로 늘어나는 것을 동적 배열이라고 합니다.

 

ArrayList 특징

 

 

동적 크기 조정: ArrayList는 내부적으로 배열을 사용하지만, 크기가 동적으로 조정된다. 요소를 추가할 때 배열의 크기가 부족하면, 새로운 배열을 할당하고 기존 요소를 복사하여 저장한다.

빠른 요소 접근: 인덱스를 사용하여 요소에 접근하는 연산은 O(1) 시간복잡도를 가진다. 이는 ArrayList의 큰 장점 중 하나이다.

요소 추가와 제거: 배열의 크기를 동적으로 조정해야 하는 경우를 제외하면, 끝에 요소를 추가하는 연산은 평균적으로 O(1) 시간복잡도를 가진다. 그러나 중간에 요소를 삽입하거나 제거하는 연산은 O(n) 시간복잡도를 가진다.

비동기성: ArrayList는 동기화되지 않기 때문에, 멀티스레드 환경에서는 외부에서 동기화 메커니즘을 제공해야 한다.

 

 

ArrayList 클래스의 생성자

 

  • 기본 생성자:기본 생성자는 초기 용량이 10인 빈 리스트를 생성한다.

ArrayList<E> list = new ArrayList<>();

  • 초기 용량을 지정하는 생성자:초기 용량을 지정하여 리스트를 생성할 수 있다.

ArrayList<E> list = new ArrayList<>(int initialCapacity);

  • 다른 컬렉션을 복사하는 생성자:지정된 컬렉션의 요소를 포함하는 리스트를 생성한다.
ArrayList<E> list = new ArrayList<>(Collection<? extends E> c);
 
 

주요 메서드

요소 추가

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

list.add("Apple");
 

add(int index, E element): 지정된 위치에 요소를 삽입한다.

list.add(1, "Banana");

요소 접근

get(int index): 지정된 위치의 요소를 반환한다.

String fruit = list.get(0);
 

set(int index, E element): 지정된 위치의 요소를 변경한다.

list.set(0, "Orange");

요소 제거

remove(int index): 지정된 위치의 요소를 제거한다.

list.remove(1);
 

remove(Object o): 지정된 요소를 제거한다.

list.remove("Apple");

기타 메서드

size(): 리스트의 요소 개수를 반환한다.

int size = list.size();
 

clear(): 리스트의 모든 요소를 제거한다.

list.clear();
 

contains(Object o): 리스트에 지정된 요소가 포함되어 있는지 확인한다.

boolean hasApple = list.contains("Apple");
 

isEmpty(): 리스트가 비어 있는지 확인한다.

boolean empty = list.isEmpty();
 

indexOf(Object o): 지정된 요소의 첫 번째 인덱스를 반환한다.

int index = list.indexOf("Apple");
 

lastIndexOf(Object o): 지정된 요소의 마지막 인덱스를 반환한다.

int lastIndex = list.lastIndexOf("Apple");
 
 
ArrayList 예제 코드
import java.util.ArrayList;
import java.util.List;

public class ArrayListExample {
    public static void main(String[] args) {
        // ArrayList 선언 및 초기화
        List<String> list = new ArrayList<>();

        // 요소 추가
        list.add("Apple");
        list.add("Banana");
        list.add("Cherry");

        // 요소 접근
        System.out.println("첫 번째 요소: " + list.get(0));

        // 요소 변경
        list.set(0, "Orange");

        // 요소 제거
        list.remove("Banana");

        // 요소 포함 여부 확인
        boolean hasCherry = list.contains("Cherry");
        System.out.println("Cherry 포함 여부: " + hasCherry);

        // 리스트 크기 확인
        int size = list.size();
        System.out.println("리스트 크기: " + size);

        // 요소 출력
        for (String fruit : list) {
            System.out.println(fruit);
        }

        // 리스트 비우기
        list.clear();
        System.out.println("리스트 비어 있는지 확인: " + list.isEmpty());
    }
}​
 
 
LinkedList란?
 
java.util 패키지에 포함된 양방향 연결 리스트(Doubly Linked List)를 사용하여 리스트(List) 및 큐(Queue) 기능을 제공하는 클래스.
 
LinkedList
 

양방향 연결 리스트: LinkedList는 각 요소가 이전 요소와 다음 요소에 대한 참조를 가지는 노드로 구성된다. 이를 통해 요소의 추가 및 제거가 배열 기반 리스트보다 효율적이다.

 

빠른 요소 추가 및 제거: LinkedList는 요소의 추가와 제거가 O(1) 시간복잡도를 가지므로, 중간에 요소를 삽입하거나 제거하는 작업이 빈번한 경우 적합하다.

 

느린 요소 접근: 인덱스를 사용하여 요소에 접근하는 연산은 O(n) 시간복잡도를 가지므로, 임의 접근보다는 순차 접근에 더 적합하다.

 

이중 기능 제공: LinkedList는 List와 Deque 인터페이스를 모두 구현하여 리스트와 덱의 기능을 모두 제공한다.

 

 

생성자

LinkedList 클래스에는 두 가지 주요 생성자가 있다.

기본 생성자:빈 리스트를 생성한다.

LinkedList<E> list = new LinkedList<>();
 

다른 컬렉션을 복사하는 생성자:지정된 컬렉션의 요소를 포함하는 리스트를 생성한다.

LinkedList<E> list = new LinkedList<>(Collection<? extends E> c);
 

주요 메서드

요소 추가

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

list.add("Apple");
 

add(int index, E element): 지정된 위치에 요소를 삽입한다.

list.add(1, "Banana");
 

addFirst(E e): 리스트의 처음에 요소를 추가한다.

list.addFirst("Orange");
 

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

list.addLast("Grape");

요소 접근

get(int index): 지정된 위치의 요소를 반환한다.

String fruit = list.get(0);
 

getFirst(): 리스트의 첫 번째 요소를 반환한다.

String firstFruit = list.getFirst();
 

getLast(): 리스트의 마지막 요소를 반환한다.

String lastFruit = list.getLast();

요소 제거

remove(int index): 지정된 위치의 요소를 제거한다.

list.remove(1);
 

remove(Object o): 지정된 요소를 제거한다.

list.remove("Apple");
 

removeFirst(): 리스트의 첫 번째 요소를 제거한다.

list.removeFirst();
 

removeLast(): 리스트의 마지막 요소를 제거한다.

list.removeLast();

기타 메서드

size(): 리스트의 요소 개수를 반환한다.

int size = list.size();
 

clear(): 리스트의 모든 요소를 제거한다.

list.clear();
 

contains(Object o): 리스트에 지정된 요소가 포함되어 있는지 확인한다.

boolean hasApple = list.contains("Apple");
 

isEmpty(): 리스트가 비어 있는지 확인한다.

boolean empty = list.isEmpty();
 

indexOf(Object o): 지정된 요소의 첫 번째 인덱스를 반환한다.

int index = list.indexOf("Apple");
 

lastIndexOf(Object o): 지정된 요소의 마지막 인덱스를 반환한다.

int lastIndex = list.lastIndexOf("Apple");
 

 

예제 코드

import java.util.LinkedList;
import java.util.List;

public class LinkedListExample {
    public static void main(String[] args) {
        // LinkedList 선언 및 초기화
        List<String> list = new LinkedList<>();

        // 요소 추가
        list.add("Apple");
        list.add("Banana");
        list.add("Cherry");

        // 요소 접근
        System.out.println("첫 번째 요소: " + list.get(0));

        // 요소 변경
        list.set(0, "Orange");

        // 요소 제거
        list.remove("Banana");

        // 요소 포함 여부 확인
        boolean hasCherry = list.contains("Cherry");
        System.out.println("Cherry 포함 여부: " + hasCherry);

        // 리스트 크기 확인
        int size = list.size();
        System.out.println("리스트 크기: " + size);

        // 요소 출력
        for (String fruit : list) {
            System.out.println(fruit);
        }

        // 리스트 비우기
        list.clear();
        System.out.println("리스트 비어 있는지 확인: " + list.isEmpty());
    }
}

 

반응형