Java ArrayList
자바 ArrayList
: 개념 및 사용법
- *
ArrayList
*는 자바에서 가장 많이 사용되는 리스트 데이터 구조 중 하나로, 크기가 가변적인 배열입니다. 기본적인 배열은 크기가 고정되어 있지만, **ArrayList
*는 필요에 따라 자동으로 크기를 조정할 수 있습니다. 이로 인해 데이터의 추가 및 삭제가 더 유연하게 이루어집니다.
자바의 ArrayList
는
.util
패키지에 포함된 클래스이며, 여러 유용한 메서드를 통해 데이터를 다루는 기능을 제공합니다.
1. ArrayList
의 특징
- 가변 크기 배열: 배열과 달리
ArrayList
는 크기를 미리 지정하지 않고 동적으로 크기가 증가하거나 감소합니다. - 중복 허용: 동일한 요소를 여러 번 추가할 수 있습니다.
- 순서 유지: 요소들은 추가된 순서를 유지합니다.
- 객체만 저장 가능:
ArrayList
는 객체만 저장할 수 있으며, 기본 자료형(예:int
,char
)은 래퍼 클래스(예:Integer
,Character
)로 자동 변환됩니다. - 비동기적:
ArrayList
는 동기화되지 않으며, 멀티스레드 환경에서 사용할 때는 별도의 동기화가 필요합니다.
2. ArrayList
선언 및 생성
ArrayList
를 사용하려면 먼저
.util.ArrayList
를 임포트해야 합니다. 다음은 기본적인 ArrayList
의 선언 및 생성 방법입니다.
선언 및 생성 예제
import java.util.ArrayList;
public class Main {
public static void main(String[] args) {
// String 타입의 ArrayList 생성
ArrayList<String> fruits = new ArrayList<>();
// Integer 타입의 ArrayList 생성
ArrayList<Integer> numbers = new ArrayList<>();
}
}
위 예제에서는 String
타입과 Integer
타입을 저장할 수 있는 ArrayList
를 생성했습니다.
제네릭을 사용하여 저장할 데이터 타입을 지정할 수 있으며, 지정된 타입 외의 데이터는 저장할 수 없습니다.
3. ArrayList
메서드
ArrayList
는 데이터를 추가, 수정, 삭제, 검색하는 다양한 메서드를 제공합니다. 주요 메서드는 다음과 같습니다.
3.1 add()
- 요소 추가
add()
메서드는 ArrayList
에 요소를 추가하는 데 사용됩니다.
import java.util.ArrayList;
public class Main {
public static void main(String[] args) {
ArrayList<String> fruits = new ArrayList<>();
// 요소 추가
fruits.add("Apple");
fruits.add("Banana");
fruits.add("Orange");
// 출력
System.out.println(fruits); // 출력: [Apple, Banana, Orange]
}
}
3.2 get()
- 요소 가져오기
get()
메서드는 ArrayList
에서 특정 인덱스에 있는 요소를 반환합니다.
import java.util.ArrayList;
public class Main {
public static void main(String[] args) {
ArrayList<String> fruits = new ArrayList<>();
fruits.add("Apple");
fruits.add("Banana");
fruits.add("Orange");
// 인덱스 1에 있는 요소 가져오기
String fruit = fruits.get(1);
System.out.println(fruit); // 출력: Banana
}
}
3.3 size()
- 리스트 크기 확인
size()
메서드는 ArrayList
에 저장된 요소의 개수를 반환합니다.
import java.util.ArrayList;
public class Main {
public static void main(String[] args) {
ArrayList<String> fruits = new ArrayList<>();
fruits.add("Apple");
fruits.add("Banana");
// 리스트 크기 확인
System.out.println(fruits.size()); // 출력: 2
}
}
3.4 set()
- 요소 수정
set()
메서드는 특정 인덱스의 요소를 새로운 값으로 수정합니다.
import java.util.ArrayList;
public class Main {
public static void main(String[] args) {
ArrayList<String> fruits = new ArrayList<>();
fruits.add("Apple");
fruits.add("Banana");
// 인덱스 1의 값을 수정
fruits.set(1, "Mango");
System.out.println(fruits); // 출력: [Apple, Mango]
}
}
3.5 remove()
- 요소 삭제
remove()
메서드는 인덱스를 사용하거나 특정 요소를 지정하여 ArrayList
에서 요소를 삭제합니다.
import java.util.ArrayList;
public class Main {
public static void main(String[] args) {
ArrayList<String> fruits = new ArrayList<>();
fruits.add("Apple");
fruits.add("Banana");
fruits.add("Orange");
// 인덱스 1의 요소 삭제
fruits.remove(1);
System.out.println(fruits); // 출력: [Apple, Orange]
// 특정 요소를 삭제
fruits.remove("Apple");
System.out.println(fruits); // 출력: [Orange]
}
}
3.6 contains()
- 요소 포함 여부 확인
contains()
메서드는 특정 요소가 ArrayList
에 포함되어 있는지 여부를 반환합니다.
import java.util.ArrayList;
public class Main {
public static void main(String[] args) {
ArrayList<String> fruits = new ArrayList<>();
fruits.add("Apple");
fruits.add("Banana");
// 특정 요소 포함 여부 확인
System.out.println(fruits.contains("Apple")); // 출력: true
System.out.println(fruits.contains("Mango")); // 출력: false
}
}
3.7 isEmpty()
- 리스트가 비어 있는지 확인
isEmpty()
메서드는 ArrayList
가 비어 있는지 확인하는 데 사용됩니다.
import java.util.ArrayList;
public class Main {
public static void main(String[] args) {
ArrayList<String> fruits = new ArrayList<>();
// 리스트가 비어 있는지 확인
System.out.println(fruits.isEmpty()); // 출력: true
fruits.add("Apple");
System.out.println(fruits.isEmpty()); // 출력: false
}
}
3.8 clear()
- 모든 요소 삭제
clear()
메서드는 ArrayList
에 저장된 모든 요소를 제거합니다.
import java.util.ArrayList;
public class Main {
public static void main(String[] args) {
ArrayList<String> fruits = new ArrayList<>();
fruits.add("Apple");
fruits.add("Banana");
// 모든 요소 삭제
fruits.clear();
System.out.println(fruits); // 출력: []
}
}
4. ArrayList
와 반복문
ArrayList
는 반복문을 사용하여 요소에 접근하거나 처리할 수 있습니다. 대표적으로 for
문, 향상된
for
문, **Iterator
**를 사용할 수 있습니다.
4.1 for
문을 사용한 반복
import java.util.ArrayList;
public class Main {
public static void main(String[] args) {
ArrayList<String> fruits = new ArrayList<>();
fruits.add("Apple");
fruits.add("Banana");
fruits.add("Orange");
// for문을 사용하여 요소 출력
for (int i = 0; i < fruits.size(); i++) {
System.out.println(fruits.get(i));
}
}
}
4.2 향상된 for
문을 사용한 반복
import java.util.ArrayList;
public class Main {
public static void main(String[] args) {
ArrayList<String> fruits = new ArrayList<>();
fruits.add("Apple");
fruits.add("Banana");
fruits.add("Orange");
// 향상된 for문을 사용하여 요소 출력
for (String fruit : fruits) {
System.out.println(fruit);
}
}
}
4.3 Iterator
를 사용한 반복
import java.util.ArrayList;
import java.util.Iterator;
public class Main {
public static void main(String[] args) {
ArrayList<String> fruits = new ArrayList<>();
fruits.add("Apple");
fruits.add("Banana");
fruits.add("Orange");
// Iterator를 사용하여 요소 반복
Iterator<String> iterator = fruits.iterator();
while (iterator.hasNext()) {
System.out.println(iterator.next());
}
}
}
5. 제네릭과 ArrayList
ArrayList
는 제네릭을 사용하여 저장할 데이터 타입을 지정할 수 있습니다. 제네릭을 사용하면 타입 안전성을 보장하며, 컴파일 시점에서 타입 오류를
방지할 수 있습니다.
import java.util.ArrayList;
public class Main {
public static void main(String[] args) {
// 정수 타입의 ArrayList 생성
ArrayList<Integer> numbers = new ArrayList<>();
numbers.add(10);
numbers.add(20);
// numbers.add("String"); // 컴파일 오류 (잘못된 데이터 타입 추가
시)
System.out.println(numbers);
}
}
6. ArrayList
와 배열의 차이점
특징 | 배열 (Array ) |
ArrayList |
---|---|---|
크기 | 고정된 크기, 생성 시 크기 지정 | 동적 크기, 요소 추가 시 자동으로 크기 증가 |
데이터 타입 | 기본형 데이터 타입 저장 가능 | 객체만 저장 가능 (래퍼 클래스를 통해 기본형 저장) |
성능 | 고정 크기라 더 빠름 | 크기 조정 시 성능 저하 가능 |
사용 방법 | 배열 연산이 직관적이고 빠름 | 다양한 메서드를 제공하여 데이터 관리가 편리 |
요약
- *
ArrayList
*는 크기가 가변적인 배열로, 동적으로 크기를 조정할 수 있는 유연한 데이터 구조입니다. - 요소 추가, 삭제, 수정, 조회를 위한 다양한 메서드를 제공합니다.
- 제네릭을 사용하여 타입 안전성을 보장할 수 있습니다.
- 반복문과
Iterator
를 사용해ArrayList
요소를 반복할 수 있습니다. - 기본 배열에 비해 더 유연하지만, 성능이 중요한 경우 기본 배열을 사용할 수 있습니다.
ArrayList
는 자바에서 가장 많이 사용되는 컬렉션 중 하나로, 다양한 상황에서 데이터를 관리하는 데 유용합니다.