List 자료구조
순서가 있는 데이터 집합을 표현하는 자료구조이다.
- 데이터 추가된 순으로 나열된다.
- 중복을 허용한다.
- 각 요소는 인덱스를 통해 순서대로 접근 가능하다.
- 데이터의 삽입, 삭제, 검색 등이 가능하다.
List 인터페이스
순서가 있는 요소들의 컬렉션(Collection)을 정의하며, 중복된 요소를 허용한다.
import java.util.List;
자바 util 패키지에 포함되어 있다.
1. 객체 생성
List<String> list = new List<>(); // ❌ 불가능
List<String> list = new ArrayList<>(); // ✅ 가능
List<String> list = new LinkedList<>(); // ✅ 가능
List<String> list = new Stack<>(); // ✅ 가능
- Java에서 제공하는 List 인터페이스(List<k>)는 객체를 직접 생성 ❌.
(추가 정보 확인 : https://kimyongjun0129.tistory.com/98) - 따라서 ArrayList, LinkedList, Vector, Stack 등의 구현체(클래스)를 사용해야 한다.
- 제네릭으로 자료형이 통일되기 때문에 같은 자료형만 넣을 수 있다. (객체만 가능하다. int ❌, Integer ✅)
- 위 코드에서 처럼 작성하는 이유 :
- 코드의 유연성 증가 : 필요에 따라 다른 구현체로 쉽게 교체할 수 있다.
- 다형성(Polymorphism) 활용 : 구현체에 의지 ❌, 하나의 인터페이스로 여러 가지 구현체를 사용할 수 있다. ✅
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.Stack;
다른 구현체(클래스)를 사용할 때는 import를 시켜줘야 한다.
2. 주요 구현체
클래스 | 내부 구조 | 주요 특징 | 동기화 여부 |
ArrayList | 동적 배열 | 빠른 검색, 느린 삽입/삭제 | ❌ |
LinkedList | 이중 연결 리스트 | 빠른 삽입/삭제, 느린 검색 | ❌ |
Vector | 동적 배열 | ArrayList + 동기화 | ✅ |
Stack | 동적 배열 | Vector 기반의 스택 구현 (LIFO) | ✅ |
3. 주요 공통 메서드들
메서드 | 설명 |
add(E e) | 요소 추가 |
add(int index, E element) | 특정 위치에 요소 추가 |
get(int index) | 특정 인덱스의 요소 가져오기 |
set(int index, E element) | 특정 인덱스의 요소 변경 |
remove(int index) | 특정 인덱스의 요소 제거 |
remove(Object o) | 특정 객체 제거 |
size() | 리스트 크기 반환 |
isEmpty() | 비어 있는지 확인 |
contains(Object o) | 특정 요소가 포함되어 있는지 확인 |
indexOf(Object o) | 처음 나타나는 인덱스 반환 |
clear() | 리스트 비우기 |
subList(int from, int to) | 부분 리스트 반환 |
List의 주요 메서드는 List 인터페이스에 정의된 것들이라 모든 List 구현체( ArrayList , LinkedList , Vector, Stack 등)에서 사용 가능 ✅
만약, 공통된 메서드들이 아닌 각 구현체(클래스)의 기능을 사용하고 싶다면
ArrayList<String> list = new ArrayList<>();
다음과 같이 인터페이스가 아닌 클래스를 이용하여 변수를 선언하고 할당하면 된다.
4. 사용 예제
더보기
import java.util.List;
import java.util.ArrayList;
public class ListExample {
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("사과");
list.add("바나나");
list.add("체리");
System.out.println(list.get(1)); // 바나나
list.set(1, "블루베리");
System.out.println(list); // [사과, 블루베리, 체리]
list.remove("사과");
System.out.println(list); // [블루베리, 체리]
System.out.println("리스트 크기: " + list.size()); // 2
}
}
'JAVA' 카테고리의 다른 글
[Java] Queue 자료구조와 Queue 인터페이스란? (0) | 2025.04.15 |
---|---|
[Java] Set 자료구조와 Set 인터페이스란? (0) | 2025.04.14 |
[Java] Collection이란? (0) | 2025.04.14 |
[JAVA] JAVA란? (0) | 2025.04.11 |
[내일 배움 캠프, JAVA 달리기 반] Lv.3 단어 맞추기 게임 (0) | 2025.04.04 |