개념
특징
- 순서 보장
List는 요소가 추가된 순서를 유지한다. 인덱스를 사용하여 특정 위치에 접근 가능
- 중복 허용
같은 값을 가진 요소를 여러 개 저장 가능
동일한 객체를 다수 추가 가능
- 가변 크기
List는 통적으로 크기를 조절 가능하다. 요소를 추가하거나 제거할 때 크기가 자동으로 조정된다.
- 인덱스 기반 접근
List는 인덱스를 기반으로 요소에 접근할 수 있다.
ex. list.get(0): list의 첫번째 요소를 가져옴
주요 메서드
- add(element): 추가
- add(index,element): 특정 인덱스에 추가
- get(index): 특정 인덱스 요소 가져옴
- remove(index): 특정 인덱스 요소 제거
- size(): 리스트 크기 반환
- clear(): 리스트 모든 요소 제거
- contains(element): 특정 요소가 포함되있는지 확인(t/f)
구현체
- ArrayList: 배열 기반 동적 리스트. 랜덤 접근이 빠름
- LinkedList: 각 요소가 이전/다음 요소에 대한 참조를 가지는 이중연결리스트. 삽입/삭제에 유리
- Vector: 동기화된 리스트.
vs 배열
배열의 주요 특징
- 고정 크기
- 빠른 접근 속도
- 일관된 데이터 타입
- 메모리 할당
vs 배열
- 크기
:배열은 생성 시 크기가 고정되며, 리스트는 동적으로 크기가 변함
- 유연성
: 리스트는 다양한 메서드를 제공하여 요소의 추가, 삭제 및 탐색을 쉽게 할 수 있지만, 배열은 이런 기능이 없음
- 성능
: 배열은 인덱스를 통해 요소에 직접 접근이 가능하지만, 리스트는 추가/삭제 작업에 유리
- 데이터 타입
- 배열은 동일 데이터 타입만 저장 가능하지만, 리스트는 제네릭을 사용하여 다양한 데이터 타입 저장 가능
Code 예시
public class ListEx {
public static void main(String[] args) {
List<String> list=new ArrayList<>();
list. add("kim");
list. add("kang");
list. add("kim");
System.out.println(list.size());
for(int i=0;i<list.size();i++){
String str=list.get(i);
System.out.println(str);
}
}
}
결과

Code 실습
import java.util.*;
public class ListEx{
public static List<String> addArray(String[] arr1, String[] arr2){
List<String> list = new ArrayList<String>();
for(String str : arr1){
list.add(str);
}
for(String str : arr2){
list.add(str);
}
return list;
}
public static void main(String[] args){
String[] arr1 = {"apple", "banana", "cherry"};
String[] arr2 = {"date", "fig", "grape"};
List<String> resultList = addArray(arr1, arr2);
System.out.println(resultList);
}
}