많은 초보자들이 Arrays.asList() 메서드의 개념을 데이터 구조 ArrayList와 혼동합니다. 비슷하게 보이고 들릴 수 있지만 이 둘은 구현에 있어 완전히 다릅니다. 이 게시물에서는 Arrays.asList() 메서드 의 기본 사용법을 다루고 이와 관련된 몇 가지 일반적인 혼란을 해결할 것입니다.
Arrays.asList()가 사용되는 이유는 무엇입니까?
목록으로 변환해야 하는 배열이 있는 경우 java.util.Arrays는 이 목적을 위해 래퍼 Arrays.asList()를 제공합니다. 간단히 말해서 이 메서드는 배열을 매개 변수로 사용하고 목록을 반환합니다. 컬렉션 프레임워크가 도입되기 전에 Java 플랫폼 API의 주요 부분이 개발되었습니다. 따라서 때때로 전통적인 배열과 보다 현대적인 컬렉션 간에 변환해야 할 수도 있습니다. 이 기능은 컬렉션과 배열 기반 API 사이의 링크 역할을 합니다.예
다음 예를 살펴보십시오.
import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
public class ArraysAsListDemo {
public static void main(String[] args) {
String[] teamMembers = {"Amanda", "Loren", "Keith"};
// using aslist() method
List teamList = Arrays.asList(teamMembers);
System.out.println("List : " + teamList);
HashSet teamHashSet = new HashSet<>(Arrays.asList(teamMembers));
System.out.println("HashSet : " + teamHashSet);
}
}
산출:
List : [Amanda, Loren, Keith] HashSet : [Keith, Loren, Amanda] // HashSet은 순서를 유지하지 않습니다.
Arrays.asList()와 ArrayList는 어떻게 다릅니까?
배열에서 Arrays.asList() 메서드를 호출하면 반환된 객체는 ArrayList ( List 인터페이스의 크기 조정 가능한 배열 구현 ) 가 아닙니다 . 기본 배열에 액세스하는 get() 및 set() 메서드가 있는 보기 개체입니다 . 연결된 반복자의 add() 또는 remove()와 같이 배열의 크기를 변경하는 모든 메서드는 UnsupportedOperationException 을 발생시킵니다 . Java 프로그램이 성공적으로 컴파일되지만 Runtime Exception이 발생하는 이유는 분명히 "List"가 다음의 결과로 반환되기 때문입니다.Arrays.asList() . 모든 추가/삭제 작업이 허용되는 경우. 그러나 기본 데이터 구조는 크기 조정이 불가능한 "배열" 이므로 런타임에 예외가 발생합니다. 다음은 어떻게 보이는지 보여주는 스니펫입니다.
import java.util.Arrays;
import java.util.List;
public class ArraysAsListDemo {
public static void main(String[] args) {
Integer[] diceRoll = new Integer[6];
//using aslist() method
List diceRollList = Arrays.asList(diceRoll);
System.out.println(diceRollList);
// using getters and setters to randomly access the list
diceRollList.set(5, 6);
diceRollList.set(0, 1);
System.out.println(diceRollList.get(5));
System.out.println(diceRollList.get(1));
System.out.println(diceRollList);
diceRollList.add(7); // Add a new Integer to the list
}
}
산출:
[null, null, null, null, null, null] 6 null [1, null, null, null, null, 6] "main" 스레드의 예외 java.lang.UnsupportedOperationException at java.util.AbstractList.add(AbstractList. java:148)에서 java.util.AbstractList.add(AbstractList.java:108)에서 ArraysAsListDemo.main(ArraysAsListDemo.java:20)
asList() 메서드 사용 예
Java SE 5.0부터 asList() 메서드는 가변 개수의 인수를 갖도록 선언되었습니다. 배열을 전달하는 대신 개별 요소를 전달할 수도 있습니다. 예를 들어:
import java.util.Arrays;
import java.util.List;
public class ArraysAsListDemo {
public static void main(String[] args) {
List seasons = Arrays.asList("winter", "summer", "spring", "fall");
List odds = Arrays.asList(1, 3, 5, 7, 9);
System.out.println(seasons);
System.out.println(odds);
}
}
산출:
[겨울, 여름, 봄, 가을] [1, 3, 5, 7, 9]
GO TO FULL VERSION