자바에서 제공하는 자료구조를 담당하는 프레임워크 → 자료구조의 모음
추가, 삭제, 정렬 등의 기능을 간단하게 처리할 수 있어 알고리즘을 구현할 필요 X
java.util 패키지에 포함되어 있음
배열의 문제점
1) 한 번 지정한 크기는 변경할 수 없다.
2) 배열에 기록된 중간 위치 데이터의 추가, 삭제가 불편하다.
3) 여러 타입의 데이터를 저장할 수 없다.
🔻 컬렉션의 장점
1) 크기에 제약이 없다.
2) 추가, 삭제, 정렬 등의 기능 처리를 간단하게 해결할 수 있다.
3) 여러 타입의 데이터를 저장할 수 있다.
⭐ 컬렉션은 객체만 저장할 수 있기 때문에,
기본 자료형을 저장해야 하는 경우에는 Wrapper 클래스를 사용한다!
자료들을 순차적으로 나열한 자료구조 (배열의 업그레이드 형태)
index를 통해 순서가 유지되며, 중복해서 객체를 저장할 수 있다.
ArrayList 클래스 ⭐ 가장 많이 사용 !
배열과 비슷한 형태의 리스트 (검색에 효율적)
기본 생성자로 생성 시 초기 용량은 10으로 설정된다.
Vector 클래스
Vector 클래스의 업그레이드 버전 → ArrayList 클래스
List 객체들 중에서 가장 성능이 좋지 않다.
LinkedList 클래스
요소 하나하나가 줄로 연결된 형태의 리스트 (추가, 삭제에 효율적)
객체 추가, 삭제 시 인덱스 바로 앞/뒤 링크만 변경하면 되기 때문에
추가, 삭제가 빈번하게 일어나면 ArrayList보다 성능이 좋다.
add(E e) : 리스트의 맨 끝에 객체 추가
list.add(new Dancer("아이키", 89));
add(int index, E e) : 지정된 index 위치에 객체 추가
list.add(3, new Dancer("허니제이", 87));
get(int index) : index 위치에 저장된 객체 반환
list.get(0);
isEmpty( ) : 컬렉션이 비어있으면 true, 아니면 false 반환
size( ) : 리스트에 저장된 객체 수 반환
Object set(int index, E e) : index 위치에 저장된 객체를 e로 변경하고 기존 객체 반환
Object obj = list.set(2, new Dancer("립제이", 88));
Object remove(int index) : index 위치에 저장된 객체를 삭제하고 기존 객체 반환
Object obj = list.remove(1);
indexOf(Object o) : 매개변수와 같은 객체가 존재하는 index 위치 반환 (없으면 -1 반환)
컬렉션이나 배열의 모든 요소를 처음부터 끝까지 순서대로 접근하는 용도의 for문
for (하나씩 꺼내서 담을 변수 선언 : 컬렉션 또는 배열명) { }
예) list에 저장된 데이터를 모두 출력
for (Object obj : list) { System.out.println(obj); }
클래스, 메서드, 컬렉션 내부에 사용되는 클래스 타입을 한 종류로 제한하는 기능 → 타입 제한
list 리스트에서 Dancer 객체의 이름 출력
public void example1() {
ArrayList list = new ArrayList();
for (int i = 0; i < list.size(); i++) {
if (list.get(i) instanceof Dancer) {
// list의 i번째 요소가 Dancer 객체의 주소를 참조하고 있는 경우 (true)
System.out.println(((Dancer)list.get(i)).getName());
// Object -> Dancer 다운 캐스팅
} else
System.out.println(list.get(i));
}
}
public void example2() {
ArrayList<Dancer> list = new ArrayList<Dancer>();
// Dancer 타입으로 제한된 ArrayList 객체 생성
// 생성된 ArrayList에는 Dancer만 저장 가능하므로, 저장된 데이터는 모두 Dancer이다.
// 향상된 for문으로 모두의 이름만 출력
for (Dancer d : list) {
// list가 Dancer 타입으로 제한되어 있기 때문에
// 하나씩 순서대로 꺼내서 저장하는 변수의 타입도 Dancer이다. (instanceof 불필요)
System.out.println(d.getName());
// d가 Dancer 타입이기 때문에 다운캐스팅 불필요
}
}