[SeSACx코딩온] Java의 ArrayList
Java의 ArrayList
- ArrayList는 크기가 고정된 배열과는 달리 필요에 따라 동적으로 크기가 증가하거나 감소할 수 있습니다.
- ArrayList는 표준 배열보다 많은 조작이 필요할 때 유용하며, 특히 동적 배열을 구현하는 데 자주 사용됩니다.
1. ArrayList 선언과 생성
ArrayList는 다양한 방식으로 선언할 수 있습니다.
- 제네릭을 사용하여 특정 타입의 요소만 저장하도록 제한할 수 있습니다.
- 제네릭을 사용하지 않으면 모든 타입의 객체를 저장할 수 있지만, 타입 안정성이 보장되지 않습니다.
// 1. List<E> list = new ArrayList<E>();
List<Integer> numbers = new ArrayList<Integer>();
// 2. List<E> list = new ArrayList<>();
List<Integer> numbers2 = new ArrayList<>();
// 3. List list = new ArrayList();
List list = new ArrayList(); // 모든 타입의 객체 저장 가능 (타입 안정성 보장 안됨)
2. ArrayList 요소 추가
ArrayList의 요소는 add()
메서드를 사용하여 추가할 수 있습니다.
numbers.add(10);
numbers.add(20);
numbers.add(30);
numbers.add(40);
numbers.add(50);
3. ArrayList 요소 접근
ArrayList의 요소는 인덱스를 사용하여 접근할 수 있으며, get()
메서드를 사용하여 특정 위치의 요소를 가져올 수 있습니다.
System.out.println("첫번째 요소: " + numbers.get(0));
System.out.println("세번째 요소: " + numbers.get(2));
4. ArrayList 요소 수정
set()
메서드를 사용하여 특정 인덱스의 값을 수정할 수 있습니다.
numbers.set(1, 77); // 두 번째 요소 수정
System.out.println("수정된 리스트: " + numbers);
출력
수정된 리스트: [10, 77, 30, 40, 50]
5. ArrayList 요소 삽입
add()
메서드는 기존 요소들 사이에 새로운 값을 삽입할 수도 있습니다. 이 경우, 인덱스가 조정됩니다.
numbers.add(1, 7); // 두 번째 인덱스에 값 삽입
System.out.println("삽입 후 리스트: " + numbers);
출력
삽입 후 리스트: [10, 7, 77, 30, 40, 50]
6. ArrayList 요소 삭제
remove()
메서드를 사용하여 특정 인덱스의 요소를 삭제할 수 있습니다.- 삭제 후에는 남은 요소들이 인덱스가 하나씩 당겨집니다.
numbers.remove(2); // 세 번째 요소 삭제
System.out.println("삭제 후 리스트: " + numbers);
출력
삭제 후 리스트: [10, 7, 30, 40, 50]
추가 삭제 후
numbers.remove(2); // 다시 세 번째 요소 삭제
System.out.println("다시 삭제 후 리스트: " + numbers);
출력
다시 삭제 후 리스트: [10, 7, 40, 50]
7. ArrayList의 원소가 사용자 정의 클래스인 경우
ArrayList는 기본 데이터 타입뿐만 아니라 사용자 정의 클래스의 객체도 저장할 수 있습니다.
1) Student 클래스 정의
class Student {
private String name;
private int age;
public Student(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() { return name; }
public int getAge() { return age; }
@Override
public String toString() {
return "{" + "name: '" + name + "', age: " + age + "}";
}
}
2) ArrayList에 Student 객체 추가
다음은 5명의 학생 정보를 ArrayList에 추가하는 예시입니다.
List<Student> students = new ArrayList<>();
students.add(new Student("John", 30));
students.add(new Student("Jennie", 31));
students.add(new Student("Rose", 32));
students.add(new Student("Lily", 30));
students.add(new Student("Say", 31));
3) ArrayList에서 Student 객체 가져오기
첫 번째 학생 객체를 가져와 정보를 출력합니다.
Student student1 = students.get(0); // 첫 번째 학생 가져오기
System.out.println("학생 정보: " + student1);
System.out.println(student1.getName() + " 학생의 나이는 " + student1.getAge() + "세 입니다.");
출력
학생 정보: {name: 'John', age: 30}
John 학생의 나이는 30세 입니다.
4) 전체 학생 리스트 출력
for-each문을 사용하여 ArrayList에 저장된 모든 학생 객체를 출력합니다.
System.out.println("=== 학생 명단 ===");
for (Student s : students) {
System.out.println(s);
}
System.out.println("===============");
출력
=== 학생 명단 ===
{name: 'John', age: 30}
{name: 'Jennie', age: 31}
{name: 'Rose', age: 32}
{name: 'Lily', age: 30}
{name: 'Say', age: 31}
===============
5) 요소 삭제
students.remove(2); // 세 번째 학생 삭제
System.out.println("학생 삭제 후: " + students);
출력
학생 삭제 후: [{name: 'John', age: 30}, {name: 'Jennie', age: 31}, {name: 'Lily', age: 30}, {name: 'Say', age: 31}]
8. ArrayList 주요 메서드
- add(): 요소 추가
- get(): 특정 인덱스의 요소 가져오기
- set(): 특정 인덱스의 요소 수정
- remove(): 특정 인덱스의 요소 삭제
- addAll(): 다른 리스트의 모든 요소를 추가
- size(): 리스트 크기 확인
- contains(): 특정 요소가 리스트에 포함되어 있는지 확인
- clear(): 모든 요소 삭제
- indexOf(): 특정 요소의 인덱스 반환
9. ArrayList와 표준 배열의 차이점
특징 | ArrayList | 배열 |
---|---|---|
크기 | 동적 (요소 추가/삭제 시 크기 조정) | 고정 |
요소 접근 방식 | get(index) 를 통해 인덱스 접근 |
array[index] |
사용 편의성 | 동적 할당, 다양한 메서드 지원 | 제한적 |
성능 | 배열보다 느릴 수 있음 | 빠름 |