Collection | └── List (인터페이스) ├── ArrayList ← 컬렉션-1 에서 배움 ├── LinkedList └── Vector ← 컬렉션-2 에서 배움
ArrayList 와 Vector 는 List 인터페이스를 구현한 클래스입니다. List 인터페이스가 "이런 메서드를 반드시 가져야 한다" 는 규칙을 정해두면 ArrayList, Vector 가 그 규칙을 따라 구현합니다. 그래서 두 클래스의 사용법이 거의 동일했던 것입니다.
List 의 세 가지 특징
1. 순서 유지 : 넣은 순서대로 저장됩니다 (인덱스 0, 1, 2 ...)
2. 중복 허용 : 같은 값을 여러 번 저장할 수 있습니다
3. 가변 크기 : 데이터를 추가/삭제하면 크기가 자동으로 변합니다
배열과 비교하면 이렇습니다.
배열 : 순서 있음, 중복 허용, 크기 고정
List : 순서 있음, 중복 허용, 크기 자동 조절 ← 크기만 다름
List 선언 방법
import java.util.ArrayList; import java.util.List;
// 방법 1: ArrayList 타입으로 선언
ArrayList list1 = new ArrayList<>();
// 방법 2: List 타입으로 선언 (더 유연한 방법)
List list2 = new ArrayList<>();
방법 2 처럼 List 타입으로 선언하면 나중에 new ArrayList<>() 자리에 new LinkedList<>() 나 new Vector<>() 로 바꾸기 쉽습니다.
----
주요 메서드
>```java
List<String> list = new ArrayList<>();
// 추가
list.add("사과"); // 맨 끝에 추가
list.add(1, "포도"); // 인덱스 1 위치에 삽입
// 조회
list.get(0); // 인덱스로 가져오기
list.size(); // 실제 개수
list.contains("사과"); // 포함 여부 → true / false
list.indexOf("사과"); // 위치 반환, 없으면 -1
// 삭제
list.remove("사과"); // 값으로 삭제
list.remove(0); // 인덱스로 삭제
list.clear(); // 전체 삭제
// 확인
list.isEmpty(); // 비어있는지 → true / false
핵심 요약
List 인터페이스
순서 있음, 중복 허용, 크기 자동 조절
구현 클래스
ArrayList : 일반적인 상황, 조회 빠름
Vector : 멀티스레드 환경 (소켓 서버)
List 타입으로 선언하면 나중에 구현체를 바꾸기 쉬움
List<String> list = new ArrayList<>();
package collection.list;
import java.util.ArrayList;
import java.util.List;
public class MoveRating {
public static void main(String[] args) {
List<String> movies = new ArrayList<>();
movies.add("범죄도시 4 - ****");
movies.add("기생충 - *****");
movies.add("올드보이 - ****");
movies.add("태권V - ***");
System.out.println("=== 전체 영 목록 === ");
for (int i = 0; i < movies.size(); i++) {
System.out.println(i + ". " + movies.get(i));
}
System.out.println("\n 총" + movies.size() + "편");
// 올드보이 삭제
movies.remove("올드보이 - ****");
//movies.remove(1);
System.out.println("\n 삭제 후 총" + movies.size() + "편");
// "기생충" 이 있는지 확인
System.out.println("기생충 존재 여부 확인 " + movies.contains("기생충 - *****"));
} // end of main
}