본문 바로가기

언어/Java

[ 자바 / Java ] List 사용하기

반응형

Java에서 List를 선언하고 사용하는 방법은 매우 중요하며, 다양한 방식으로 이를 활용할 수 있습니다. List는 Java Collections Framework의 일부이며, 요소의 순서를 유지하고 중복된 요소를 허용하는 컬렉션입니다. 주로 ArrayList, LinkedList 같은 구현체를 사용합니다. 여기서는 List를 선언하고 사용하는 기본적인 방법을 설명하겠습니다.

1. List 인터페이스와 구현체 선언

List는 인터페이스로, 이를 구현하는 여러 클래스들이 있습니다. 가장 흔히 사용되는 ArrayListLinkedList를 예로 들어 설명하겠습니다.

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

public class ListExample {
    public static void main(String[] args) {
        // ArrayList 선언
        List<String> arrayList = new ArrayList<>();

        // LinkedList 선언
        List<String> linkedList = new LinkedList<>();
    }
}

2. List에 요소 추가하기

List에 요소를 추가할 때는 add() 메소드를 사용합니다.

import java.util.List;
import java.util.ArrayList;

public class ListExample {
    public static void main(String[] args) {
        List<String> list = new ArrayList<>();

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

        // 리스트 출력
        System.out.println("List: " + list);
    }
}

출력 결과:

List: [Apple, Banana, Cherry]

3. 특정 위치에 요소 추가하기

List는 특정 인덱스에 요소를 추가할 수 있습니다.

import java.util.List;
import java.util.ArrayList;

public class ListExample {
    public static void main(String[] args) {
        List<String> list = new ArrayList<>();

        list.add("Apple");
        list.add("Banana");
        list.add(1, "Orange"); // 인덱스 1에 요소 추가

        System.out.println("List: " + list);
    }
}

출력 결과:

List: [Apple, Orange, Banana]

4. List에서 요소 가져오기

get() 메소드를 사용하여 특정 인덱스의 요소를 가져올 수 있습니다.

import java.util.List;
import java.util.ArrayList;

public class ListExample {
    public static void main(String[] args) {
        List<String> list = new ArrayList<>();

        list.add("Apple");
        list.add("Banana");
        list.add("Cherry");

        String secondElement = list.get(1); // 인덱스 1의 요소 가져오기
        System.out.println("Second element: " + secondElement);
    }
}

출력 결과:

Second element: Banana

5. List에서 요소 제거하기

remove() 메소드를 사용하여 특정 인덱스 또는 특정 요소를 제거할 수 있습니다.

import java.util.List;
import java.util.ArrayList;

public class ListExample {
    public static void main(String[] args) {
        List<String> list = new ArrayList<>();

        list.add("Apple");
        list.add("Banana");
        list.add("Cherry");

        list.remove(1); // 인덱스 1의 요소 제거
        list.remove("Cherry"); // "Cherry" 요소 제거

        System.out.println("List after removal: " + list);
    }
}

출력 결과:

List after removal: [Apple]

6. List의 크기 확인하기

size() 메소드를 사용하여 List의 크기를 확인할 수 있습니다.

import java.util.List;
import java.util.ArrayList;

public class ListExample {
    public static void main(String[] args) {
        List<String> list = new ArrayList<>();

        list.add("Apple");
        list.add("Banana");

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

출력 결과:

Size of list: 2

7. List의 모든 요소 순회하기

for 루프 또는 for-each 루프를 사용하여 List의 모든 요소를 순회할 수 있습니다.

import java.util.List;
import java.util.ArrayList;

public class ListExample {
    public static void main(String[] args) {
        List<String> list = new ArrayList<>();

        list.add("Apple");
        list.add("Banana");
        list.add("Cherry");

        // 전통적인 for 루프
        for (int i = 0; i < list.size(); i++) {
            System.out.println("Element at index " + i + ": " + list.get(i));
        }

        // for-each 루프
        for (String element : list) {
            System.out.println("Element: " + element);
        }
    }
}

출력 결과:

Element at index 0: Apple
Element at index 1: Banana
Element at index 2: Cherry
Element: Apple
Element: Banana
Element: Cherry

8. List의 다른 유용한 메소드들

List에는 추가적으로 유용한 메소드들이 많이 있습니다. 예를 들어, contains(), indexOf(), clear() 등이 있습니다.

import java.util.List;
import java.util.ArrayList;

public class ListExample {
    public static void main(String[] args) {
        List<String> list = new ArrayList<>();

        list.add("Apple");
        list.add("Banana");
        list.add("Cherry");

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

        // 요소의 인덱스 찾기
        int indexOfCherry = list.indexOf("Cherry");
        System.out.println("Index of Cherry: " + indexOfCherry);

        // 리스트 비우기
        list.clear();
        System.out.println("List after clear: " + list);
    }
}

출력 결과:

List contains Banana: true
Index of Cherry: 2
List after clear: []

9. 다양한 List 구현체

ArrayList 외에도 다양한 List 구현체가 있으며, 사용 용도에 따라 적절한 구현체를 선택할 수 있습니다. 예를 들어:

  • ArrayList: 동적 배열 기반으로 빠른 랜덤 접근과 적은 메모리 오버헤드를 제공합니다. 요소 추가와 삭제는 비용이 클 수 있습니다.
  • LinkedList: 이중 연결 리스트로 구현되어 있으며, 요소 추가와 삭제가 빠릅니다. 그러나 인덱스 기반 접근이 느립니다.
  • Vector: ArrayList와 유사하지만, 동기화된 메소드들을 제공합니다. 멀티스레드 환경에서 사용할 수 있지만, 요즘에는 잘 사용되지 않습니다.
  • CopyOnWriteArrayList: 멀티스레드 환경에서 쓰기 작업 시 새로운 복사본을 생성하여 동시성 문제를 피할 수 있도록 설계되었습니다.

예제: LinkedList 사용

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

public class LinkedListExample {
    public static void main(String[] args) {
        List<String> list = new LinkedList<>();

        list.add("Apple");
        list.add("Banana");
        list.add("Cherry");

        System.out.println("LinkedList: " + list);
    }
}

출력 결과:

LinkedList: [Apple, Banana, Cherry]

이 예제에서는 LinkedList를 사용하여 List를 선언하고 요소를 추가하는 방법을 보여줍니다.

결론

List는 Java에서 매우 유용한 데이터 구조로, 다양한 구현체와 메소드를 통해 강력한 기능을 제공합니다. 필요에 따라 적합한 구현체를 선택하고, List의 메소드를 활용하여 효율적인 코드 작성을 할 수 있습니다.

반응형