Java에서 배열을 ArrayList로 변환하기
왜 배열을 ArrayList로 변환할까요?
- 동적 크기: ArrayList는 필요에 따라 크기를 조절할 수 있어 배열처럼 미리 크기를 정해둘 필요가 없습니다. 데이터가 추가되거나 삭제될 때 유연하게 대처할 수 있습니다.
- 다양한 메소드: ArrayList는 add, remove, get 등 다양한 메소드를 제공하여 배열보다 더 편리하게 데이터를 관리할 수 있습니다.
- 컬렉션 프레임워크: ArrayList는 Java 컬렉션 프레임워크의 일부로, 다른 컬렉션 클래스들과 함께 사용하기 좋습니다.
배열을 ArrayList로 변환하는 방법
Arrays.asList() 메서드 사용:
String[] fruits = {"apple", "banana", "orange"};
List<String> fruitList = Arrays.asList(fruits);
- 장점: 간결하고 편리합니다.
- 단점: 반환된 List는 원본 배열을 참조하며, 크기를 변경할 수 없습니다. 즉, add, remove 등의 메서드를 사용하여 요소를 추가하거나 삭제하면 UnsupportedOperationException이 발생합니다.
ArrayList 생성자에 배열 전달:
String[] fruits = {"apple", "banana", "orange"};
List<String> fruitList = new ArrayList<>(Arrays.asList(fruits));
- 장점: Arrays.asList()의 단점을 보완하여 ArrayList의 모든 기능을 사용할 수 있습니다.
- 단점: Arrays.asList()를 한 번 더 호출해야 하므로 약간의 오버헤드가 발생합니다.
예시:
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class ArrayToArrayListExample {
public static void main(Str ing[] args) {
// 정수형 배열 생성
int[] numbers = {1, 2, 3, 4, 5};
// Arrays.asList() 사용하여 List 생성 (크기 변경 불가)
List<Integer> numberList1 = Arrays.asList(numbers);
// numberList1.add(6); // UnsupportedOperationException 발생
// ArrayList 생성자에 배열 전달 (크기 변경 가능)
List<Integer> numberList2 = new ArrayList<>(Arrays.asList(numbers));
numberList2.add(6);
// ArrayList의 요소 출력
for (int number : numberList2) {
System.out.println(number);
}
}
}
요약
- **Arrays.asList()**는 간편하지만 크기 변경이 불가능합니다.
- ArrayList 생성자는 크기 변경이 가능하지만 약간의 오버헤드가 발생합니다.
어떤 방법을 선택할지는 상황에 따라 다릅니다.
- 데이터를 추가하거나 삭제할 필요가 없고, 단순히 배열을 List 형태로 사용하고 싶다면 Arrays.asList()를 사용하면 됩니다.
- List의 모든 기능을 활용하고 싶다면 ArrayList 생성자를 사용해야 합니다.
주의:
- 기본형 배열 (int[], double[] 등)을 ArrayList에 직접 넣을 수 없습니다. 먼저 Wrapper 클래스 (Integer, Double 등)로 변환해야 합니다.
- Arrays.asList()로 생성된 List는 원본 배열을 참조하므로, 원본 배열의 값이 변경되면 List의 값도 함께 변경됩니다.
Java 배열을 ArrayList로 변환하는 다양한 샘플 코드
Arrays.asList() 사용 (크기 변경 불가)
import java.util.Arrays;
import java.util.List;
public class ArrayToListExample {
public static void main(String[] args) {
String [] fruits = {"apple", "banana", "orange"};
List<String> fruitList = Arrays.asList(fruits);
// 요소 출력
for (String fruit : fruitList) {
System.out.println(fruit);
}
// 크기 변경 시도 (UnsupportedOperationException 발생)
// fruitList.add("grape");
}
}
ArrayList 생성자 사용 (크기 변경 가능)
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class ArrayToListExample {
public static void main(String[] a rgs) {
String[] fruits = {"apple", "banana", "orange"};
List<String> fruitList = new ArrayList<>(Arrays.asList(fruits));
// 요소 출력
for (String fruit : fruitList) {
System.out.println(fruit);
}
// 요소 추가
fruitList.add("grape");
System.out.println(fruitList);
}
}
기본형 배열을 Wrapper 클래스로 변환 후 ArrayList 생성
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class ArrayToListExample {
public static void main(String[] a rgs) {
int[] numbers = {1, 2, 3, 4, 5};
// 기본형 배열을 Integer 배열로 변환
Integer[] intArray = Arrays.stream(numbers).boxed().toArray(Integer[]::new);
// ArrayList 생성
List<Integer> numberList = new ArrayList<>(Arrays.stream(intArray).toList());
// 요소 출력
for (int number : numberList) {
System.out.println(number);
}
}
}
각 코드 설명
- 코드 1: Arrays.asList()를 사용하여 간단하게 변환하지만, 크기를 변경할 수 없습니다.
- 코드 2: ArrayList 생성자를 사용하여 크기 변경이 가능한 List를 생성합니다.
- 코드 3: 기본형 배열을 Wrapper 클래스로 변환한 후 ArrayList를 생성하는 방법입니다. Java 8부터 도입된 Stream API를 활용하여 간결하게 작성했습니다.
주의 사항
- 기본형 배열은 자동으로 Wrapper 클래스로 변환되지 않으므로, 명시적으로 변환해야 합니다.
선택 가이드
- 간편하게 변환하고 크기 변경이 필요 없을 때: Arrays.asList()
- 크기 변경이 필요하고 ArrayList의 모든 기능을 사용하고 싶을 때: ArrayList 생성자
- 기본형 배열을 다룰 때: Wrapper 클래스로 변환 후 ArrayList 생성
어떤 코드를 사용할지는 상황과 요구사항에 따라 적절하게 선택해야 합니다.
추가 설명
- Stream API: Java 8부터 도입된 Stream API는 데이터 처리를 더욱 유연하고 간결하게 만들어줍니다. 코드 3에서 사용된
Arrays.stream(numbers).boxed().toArray(Integer[]::new)
부분은 배열을 Stream으로 변환하고, 각 요소를 Wrapper 클래스로 변환한 후 다시 배열로 변환하는 과정을 나타냅니다. - List.of(): Java 9부터 도입된 List.of()는 Arrays.asList()와 비슷한 기능을 제공하지만, Immutable List를 생성합니다. 즉, 생성된 List의 크기를 변경할 수 없습니다.
참고: 위 코드들은 Java 8 이상에서 실행 가능합니다.
원하는 기능이나 상황에 맞춰 코드를 수정하여 사용할 수 있습니다.
- 예를 들어, 특정 조건에 맞는 요소만 추출하여 ArrayList에 추가하거나, 정렬된 ArrayList를 만들고 싶다면 추가적인 코드가 필요합니다.
Java 배열을 ArrayList로 변환하는 대체 방법
특정 조건에 맞는 요소만 추출하여 ArrayList에 추가:
- Stream API 활용:
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
public class ArrayToListExample {
public static void main(String[] args) {
int[] num bers = {1, 2, 3, 4, 5};
// 짝수만 추출하여 ArrayList 생성
List<Integer> evenNumbers = Arrays.stream(numbers)
.filter(n -> n % 2 == 0)
.boxed()
.collect(Collectors.toList());
System.out.println(evenNumbers); // [2, 4]
}
}
- for 루프 활용:
import java.util.ArrayList;
import java.util.List;
public class ArrayToListExample {
public static void main(String[] args) {
int[] numbers = {1, 2, 3, 4, 5};
List<Integer> evenNumbers = new ArrayList<>();
for (int number : numbers) {
if (number % 2 == 0) {
evenNumbers.add(number);
}
}
System.out.println(evenNum bers);
}
}
정렬된 ArrayList 생성:
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
public class Array ToListExample {
public static void main(String[] args) {
String[] fruits = {"banana", "apple", "orange"};
// ArrayList 생성 후 정렬
List<String> sortedFruits = new ArrayList<>(Arrays.asList(fruits));
Collections.sort(sortedFruits);
System.out.println(sortedFruits); // [apple, banana, orange]
}
}
특정 요소를 제외하고 ArrayList 생성:
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class ArrayToListExample {
public static void main(String[] a rgs) {
String[] fruits = {"apple", "banana", "orange"};
// "banana"를 제외한 ArrayList 생성
List<String> filteredFruits = new ArrayList<>();
for (String fruit : fruits) {
if (!fruit.equals("banana")) {
filteredFruits.add(fruit);
}
}
System.out.println(filteredFruits); // [apple, orange]
}
}
복잡한 로직:
- Custom 클래스: 배열 요소가 Custom 클래스라면, 해당 클래스의 특성에 맞는 로직을 구현해야 합니다.
- 다차원 배열: 다차원 배열을 ArrayList로 변환하는 경우, 중첩된 List를 사용해야 합니다.
어떤 대체 방법이 필요한지 더 구체적으로 설명해주시면 더욱 정확한 답변을 드릴 수 있습니다.
- "배열에서 특정 값보다 큰 값만 추출하여 ArrayList에 저장하고 싶습니다."
- "다차원 배열을 일차원 ArrayList로 변환하고 싶습니다."
- "Custom 객체 배열을 특정 필드 값으로 정렬하여 ArrayList에 저장하고 싶습니다."
다음과 같은 정보를 제공해주시면 도움이 됩니다:
- 원본 배열의 자료형: int, String, Custom 클래스 등
- 추출 조건: 특정 값, 범위, 조건식 등
- 정렬 기준: 오름차순, 내림차순, 특정 필드 등
- 최종 결과물: 어떤 형태의 ArrayList를 원하는지
java arrays arraylist