[Java] Arrays.asList

NHJ·2022년 5월 5일
0

Arrays.asList

String[] stringArray = new String[] { "A", "B", "C", "D" };
List stringList = Arrays.asList(stringArray);

배열을 리스트로 바꿀때 위와같이 Arrays.asList 메소드를 사용하면 손쉽게 바꿀 수 있다.

stringList.add("E");
// Exception in thread "main" java.lang.UnsupportedOperationException
//	at java.base/java.util.AbstractList.add(AbstractList.java:153)
//	at java.base/java.util.AbstractList.add(AbstractList.java:111)

Arrays.asList 메소드는 고정된 사이즈의 리스트 오브젝트를 반환한다.
이 리스트는 배열을 리스트로 사용할수 있게 해주는 wrapper일뿐 어떠한 데이터도 생성되거나 복사되지 않는다. 또한 원소를 추가하거나 삭제는것이 불가능하다.
따라서 위와 같이 리스트에 원소를 추가하려고 하면 에러가 난다.

stringList.set(0, "E");

System.out.println(Arrays.toString(stringArray));
System.out.println(stringList);

// [E, B, C, D]
// [E, B, C, D]

그러나 리스트내의 원소에 대해서 수정은 가능하다. 이러한 수정사항은 원래 배열에도
반영되는것을 확인할 수 있다.

그렇다면 배열에서 리스트로 바꾸면서 원소를 추가, 삭제하고 싶은 경우는 어떻게 할까?

String[] stringArray = new String[] { "A", "B", "C", "D" }; 
List stringList = new ArrayList<>(Arrays.asList(stringArray));

위와 같이 Arrays.asList로 반환된 리스트를 new ArrayList의 인자로 넣어주면 된다.

stringList.add("E");
System.out.println(stringList);
System.out.println(Arrays.toString(stringArray));
// [A, B, C, D, E]
// [A, B, C, D]

stringList.set(0, "F");
System.out.println(stringList);
System.out.println(Arrays.toString(stringArray));
// [F, B, C, D, E]
// [A, B, C, D]

Arrays.asList로 반환된 리스트와 달리 독립된 리스트이므로 원소 추가, 삭제가 가능하며
수정사항이 원래의 배열에 적용되지 않는것을 확인할 수 있다.

[참고]

profile
화이팅!

0개의 댓글