ArrrayList<E>
ArrayList<E>(이하 ArrayList)는 가변 크기의 배열을 구현한 컬렉션 클래스로서 경로명은 java.util.ArrayList이며, Vector 클래스와 거의 동일합니다. 크게 다른 점은 ArrayList는 스레드 간에 동기화를 지원하지 않기 때문에, 다수의 스레드가 동시에 ArrayList에 요소를 삽입하거나 삭제할 때 ArrayList의 데이터가 훼손될 유려가 있습니다. 하지만 멀티스레드 동기화를 위한 시간 소모가 없기 때문에, ArrayList는 Vector보다 속도가 빨라, 단일 스레드 응용에는 더 효과적입니다.
ArrayList 객체의 내부 구성을 보여줍니다. 내부의 배열을 가지고 있으며 이 배열을 가변 크기로 관리합니다. ArrayList는 인덱스로 요소를 접근할 수 있으며, 인덱스는 0부터 시작합니다.

| 메소드 | 설명 |
| boolean add(E element) | ArrayList의 맨 뒤에 element 추가 |
| void add(int index, E element) | 인덱스 index 위치에 element 삽입 |
| boolean addAll(Collection<? extends E> c) | 컬렉션 c의 모든 요소를 ArrayList의 맨 뒤에 추가 |
| void clear() | ArrayList의 모든 요소 삭제 |
| boolean contains(Object o) | ArrayList가 지정된 객체가 포함되고 있으면 true 리턴 |
| E elementAt(int index) | index 인덱스의 요소 리턴 |
| E get(int index) | index 인덱스의 요소 리턴 |
| int indexOf(Object o) | o와 같은 첫 번째 요소의 인덱스 리턴, 없으면 -1 리턴 |
| boolean isEmpty() | ArrayList가 비어 있으면 true 리턴 |
| E remove(int index) | index 인덱스의 요소 삭제 |
| boolean remove(Object o) | o와 같은 첫 번째 요소를 ArrayList에서 삭제 |
| int size() | ArrayList가 포함하는 요소의 개수 리턴 |
| Object[] toArray() | ArrayList의 모든 요소를 포함하는 배열 리턴 |
ArrayList의 생성
문자열만 다루는 ArrayList를 생성해봅시다.
ArrayList<String> a = new ArrayList<String>();
// Java 7부터 ArrayList<String> a = new ArrayList<>();로 간략히 쓸 수 있음
// Java 10부터 var a = new ArrayList<String>();로 간략히 쓸 수 있음
a는 문자열만 삽입하고 검색할 수 있는 ArrayList 객체입니다. ArrayList는 스스로 용량을 조절하기 때문에 용량에 대해 신경 쓸 필요가 없습니다.
ArrayList에 요소 삽입
add() 메소드를 사용하여 다음과 같이 3개의 문자열을 삽입해봅시다.
a.add("Hello");
a.add("Hi");
a.add("Java");
a에 삽입할 수 있는 요소는 String 타입만 사능합니다. a에 문자열이 아닌 객체나 값을 삽입하면 다음과 같이 오류가 발생합니다.
a.add(5); // 컴파일 오류. 정수 삽입 불가
a.add(new Point(3, 5)); // 컴파일 오류. Point 객체 삽입 불가
ArrayList에도 Vector와 마찬가지로 null을 삽입할 수 있습니다.
a.add(null);
add() 메소드를 이용하면 ArrayList의 중간에 요소를 삽입할 수 있습니다. 다음은 인덱스 2의 위치에 "Sahni"를 삽입하는 코드입니다.
a.add(2, "Sahni");
"Sahni"를 인덱스 2에 삽입하고 기존의 인덱스 2와 그 뒤에 있는 요소들을 한 자리씩 뒤로 이동시킨다. 하지만, 이 코드의 실행 전, ArrayList에 들어 있는 요소의 개수가 2보다 작으면 예외가 발생합니다. add()는 끝이나 중간에만 요소를 삽입합니다.
ArrayList 내의 요소 알아내기
get()이나 elementAt() 메소드를 이용하면 ArrayList 내의 요소를 알아낼 수 있습니다. 다음 코드는 인덱스 1의 위치에 있는 요소를 리턴합니다.
String str = a.get(1); // "Hi" 리턴
ArrayList에 크기 알아내기
size() 메소드를 호출하면 현재 ArrayList에 들어 있는 요소의 개수를 알아낼 수 있습니다.
int len = a.size(); // ArrayList에 들어 있는 요소의 개수
ArrayList는 벡터와 갈리 현재 용량을 리턴하는 메소드가 없습니다.
ArrayList에서 요소 삭제
remove() 메소드를 이용하면 ArrayList 내 임의의 인덱스에 있는 요소를 삭제할 수 있습니다. 다음 코드는 인덱스 1의 위치에 있는 요소를 삭제합니다. 이 결과 뒤에 있는 요소들이 한 자리씩 앞으로 이동합니다.
a.remove(1); // 인덱스 1의 위치에 있는 요소 삭제
다음과 같이 객체 레퍼런스를 이용하여 remove()를 호출할 수도 있습니다.
String s = new String("bye");
a.add(s);
...
a.remove(s); // a에서 문자열 s 삭제
ArrayList에 있는 모든 요소를 삭제하려면 다음과 같이 clear()를 호출합니다.
a.clear();
ArrayList 컬렉션의 생성, 요소 삽입, 삭제 등 ArrayList를 다루는 과정은 다음과 같습니다.


문자열 입력받아 ArrayList에 저장
import java.util.ArrayList;
import java.util.Scanner;
public class ArrayListEx {
public static void main(String[] args) {
// 문자열이 삽입 가능한 ArrayList 생성
ArrayList<String> a = new ArrayList<>();
// 키보드로부터 4개의 이름을 입력받아 ArrayList에 삽입
Scanner scanner = new Scanner(System.in); // Scanner 객체 생성
for (int i = 0; i < 4; i++) {
System.out.print("이름을 입력하세요>>");
String s = scanner.next(); // 키보도로부터 이름을 입력
a.add(s); // ArrayList 컬렉션에 삽입
}
// ArrayList에 들어 있는 모든 이름 출력
for (int i = 0; i < a.size(); i++) {
String name = a.get(i); // ArrayList의 i 번째 문자열 앋어오기
System.out.print(name + " ");
}
// 가장 긴 이름 출력
int longestIndex = 0; // 현재 가장 긴 이름이 있는 ArrayList 내의 인덱스
for (int i = 1; i < a.size(); i++) {
if (a.get(longestIndex).length() < a.get(i).length()) // 이름 길이 비교
longestIndex = i; // i번째 이름이 더 긴 이름임
}
System.out.println("\n가장 긴 이름은 : " + a.get(longestIndex));
scanner.close();
}
}
실행 결과
이름을 입력하세요>>Mike
이름을 입력하세요>>Jane
이름을 입력하세요>>Ashley
이름을 입력하세요>>Helen
Mike Jane Ashley Helen
가장 긴 이름은 : Ashley
'프로그래밍 언어 > JAVA' 카테고리의 다른 글
| HashMap<K, V> (0) | 2025.04.05 |
|---|---|
| 컬렉션의 순차 검색을 위한 Iterator (0) | 2025.04.02 |
| Vector<E> (0) | 2025.03.28 |
| 컬렉션과 제네릭 (0) | 2025.03.24 |
| Calendar 클래스 (0) | 2025.03.21 |