본문 바로가기

Java

Arrays.asList()

List<String> stringList = Arrays.asList(arr);

arr이라는 배열을 ArrayList로 바꿔 반환하는 메서드.

 

 

우리가 일반적으로 아는 java.util.ArrayList와 다르다.

레퍼런스를 찾아보면java.util.Arrays에서 함수를 발견할 수 있는데,

 

Returns a fixed-size list backed by the specified array.

This method acts as bridge between array-based and collection-based APIs, in combination with Collection.toArray().

이라는 문구가  있다.

 

고정된 사이즈의 배열을 반환한다는 것이 무엇일까.

asList()로 만들어진 ArrayList는 set(), get(), contains()는 가능하지만 add() 메소드가 없다.

요소의 추가와 제거가 불가능하다는 것이다.

 

Collection.toArray() 함수와 대응되게 만들었다고 한다.

 

 

 

또한 이런 문구가 있다.

This method also provides a convenient way to create a fixed-size list initialized to contain several elements:

 

List<String> stooges = Arrays.asList("Larry", "Moe", "Curly");

 

'고정된 크기'의 리스트를 만드는 편리한 방법을 제공한다고 한다.

 

 

 

 

asList()로 반환된 리스트의 또 다른 특징)

public static void main(String[] args){
        String[] fruits = new String[]{"apple", "banana", "cherry"};

        List<String> fruitsList = Arrays.asList(fruits);

        System.out.println("fruits : " + Arrays.toString(fruits));
        System.out.println("fruitsList : " + fruitsList);

        fruits[0] += "Good"; // String을 변경

        System.out.println();
        System.out.println("fruits : " + Arrays.toString(fruits));
        System.out.println("fruitsList : " + fruitsList);

        fruitsList.set(2, fruitsList.get(2) + "bad"); // ArrayList 변경
        
        System.out.println();
        System.out.println("fruits : " + Arrays.toString(fruits));
        System.out.println("fruitsList : " + fruitsList);
}
fruits : [apple, banana, cherry]
fruitsList : [apple, banana, cherry]

fruits : [appleGood, banana, cherry]
fruitsList : [appleGood, banana, cherry]

fruits : [appleGood, banana, cherrybad]
fruitsList : [appleGood, banana, cherrybad]

 

String으로 ArrayList를 만들었다.

 

결과를 보면 String을 바꾸었는데 ArrayList도 함께 바뀌었고,

ArrayList을 바꾸었는데 String도 함께 바뀌었다.

 

원본배열의 주소값으로 ArrayList를 만들고 있는 것이다.

따라서 요소의 추가/제거를 제한하고 있는 것이다.

List로 바꿔서 요소를 추가하면 원본 배열도 추가될 것이기 때문에.

 

결론적으로,

asList()는 배열에서 set(), get(), contain()메소드를 사용하기 위해 배열을 바꿔서 사용하는 기능으로 주로 사용한다고 한다.

 

 

 

 

 

 

배열을 java.util.ArrayList로 바꾸는 방법은

List<> list = new ArrayList<>(Arrays.asList(arr));

의 방식을 취할 수 있다.

 

또는 stream()을 이용하여

Arrays.stream(arr).collect(Collectors.toList());

과 같은 형식을 취할 수 있을 것이다.

'Java' 카테고리의 다른 글

equals() Overriding  (0) 2020.12.09
String과 StringBuilder  (0) 2020.12.06
Google Java Style Guide(번역)  (0) 2020.11.28
Java 접근지정자  (0) 2020.11.08
JAVA) 제네릭  (0) 2020.03.24