개발천재

[JAVA] List<>와 ArrayList 본문

개발 준비/JAVA

[JAVA] List<>와 ArrayList

세리블리 2025. 2. 20. 22:35
728x90
반응형

List<> 이해하기

List는 Java에서 제공하는 *컬렉션(Collection) 중 하나로, 순서가 있는 데이터의 집합을 다루기 위한 인터페이스이다. List는 중복을 허용하며, 각 요소가 순서대로 저장된다. List의 구현체로는 ArrayList, LinkedList 등이 있다.

List<Product> productList = new ArrayList<>();

List<담을타입> 이름 = new ArrayList<>();

 

*컬렉션(Collection)은 데이터의 집합을 관리하는 Java의 표준 라이브러리이다.

여러 데이터를 하나의 객체로 묶어서 다룰 수 있도록 도와주는 인터페이스와 클래스를 제공하며, 자주 사용하는 컬렉션 클래스에는 List, Set, Map 등이다.

 


 

 

List<>의 주요 특징

순서 유지

List에 저장된 데이터는 입력된 순서대로 저장된다. 즉, 데이터가 어떤 순서로 들어갔는지 알 수 있다.

중복 허용

List는 동일한 데이터를 여러 번 저장할 수 있다. 예를 들어, "apple", "apple", "orange"와 같이 중복된 값을 허용한다.

인덱스 기반 접근

List의 각 요소는 0부터 시작하는 인덱스로 접근할 수 있다. 예를 들어, 첫 번째 요소는 list.get(0)으로 접근할 수 있다.

동적 크기

List의 크기는 고정되어 있지 않고, 필요에 따라 자동으로 확장된다. 데이터를 추가하거나 제거할 때 크기가 변경될 수 있다.

 

List 주요 메서드

  • add(E e): 리스트에 요소를 추가한다.
  • get(int index): 지정한 인덱스에 위치한 요소를 반환한다.
  • remove(int index): 지정한 인덱스의 요소를 삭제한다.
  • size(): 리스트에 저장된 요소의 개수를 반환한다.
  • contains(Object o): 리스트에 지정된 요소가 있는지 여부를 반환한다.
  • indexOf(Object o): 리스트에서 지정된 요소의 첫 번째 인덱스를 반환한다. 없으면 -1을 반환한다.
  • clear(): 리스트의 모든 요소를 제거한다.
import java.util.List;
import java.util.ArrayList;

public class ListExample {
    public static void main(String[] args) {
        // List 생성 (ArrayList 사용)
        List<String> fruits = new ArrayList<>();

        // 요소 추가
        fruits.add("Apple");
        fruits.add("Banana");
        fruits.add("Orange");

        // 인덱스로 요소 접근
        System.out.println("첫 번째 과일: " + fruits.get(0)); // Apple

        // 리스트의 크기
        System.out.println("리스트 크기: " + fruits.size()); // 3

        // 리스트에서 요소 삭제
        fruits.remove(1); // 인덱스 1에 있는 "Banana" 삭제
        System.out.println("리스트 크기: " + fruits.size()); // 2

        // 요소가 리스트에 포함되어 있는지 확인
        System.out.println("리스트에 'Apple'이 있나요? " + fruits.contains("Apple")); // true
    }
}

 

 


 

 

ArrayList와 LinkedList

List 인터페이스는 다양한 구현체를 가질 수 있다. 대표적으로 두 가지 구현체인 ArrayList와 LinkedList가 있다. 읽기 중심 작업이 많다면 ArrayList를 사용하는 것이 유리하고 삽입/삭제 중심 작업이 많다면 LinkedList가 더 효율적일 수 있다.

 

ArrayList(위의 예시 코드 참고)

배열을 기반으로 한 동적 리스트이며, 데이터를 배열에 연속적으로 저장하고 인덱스를 생성한다.

중복 데이터를 허용한다.

인덱스를 통해 요소에 빠르게 접근이 가능해서 삽입 삭제가 용이하다.( .size(), indexOf(), add(), set(), remove() 등)

데이터를 저장할 때 가장 많이 사용하는게 ArrayList와 Map이다.

 

LinkedList

링크드 리스트(연결 리스트) 방식으로 구현된 리스트이다.
요소를 삽입하거나 삭제하는 데는 ArrayList보다 효율적이다.
하지만 요소에 접근할 때는 ArrayList보다 더 많은 시간이 걸린다.

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

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

        // 요소 추가
        fruits.add("Apple");
        fruits.add("Banana");
        fruits.add("Orange");

        // 인덱스를 사용하여 접근
        System.out.println("첫 번째 과일: " + fruits.get(0));  // Apple
        System.out.println("두 번째 과일: " + fruits.get(1));  // Banana

        // 리스트 크기
        System.out.println("리스트 크기: " + fruits.size());  // 3

        // 중간에 요소 삽입
        fruits.add(1, "Grapes");  // 인덱스 1에 "Grapes" 삽입
        System.out.println(fruits);  // [Apple, Grapes, Banana, Orange]

        // 요소 삭제
        fruits.remove(2);  // 인덱스 2에 있는 "Banana" 삭제
        System.out.println(fruits);  // [Apple, Grapes, Orange]

        // for-each 사용
        System.out.println("리스트의 모든 과일:");
        for (String fruit : fruits) {
            System.out.println(fruit);  // Apple, Grapes, Orange
        }
    }
}

 

 

 

 

반응형