상세 컨텐츠

본문 제목

Java : 1개의 엘리먼트가 들어있는 리스트를 사용할때에는 Arrays.asList 대신 Collections.singletonList를 사용하자

IT/프로그래밍

by James Lee. 2017. 5. 6. 09:25

본문

1개짜리 String 요소를 가진 List를 생성하려고 하는데 인텔리제이에서 아래와 같이 Arrays.asList가 아니라 Collections.singletonList를 사용하라고 한다.

Reports any calls to Arrays.asList() with zero arguments or only one argument. Such calls could be replaced with either a call to Collections.singletonList() or Collections.emptyList() which will save some memory.

storageService.removeFile(Collections.singletonList(storedLocation));

찾아보니 이유는 메모리를 좀 더 아낄 수 있어서이다.
이 외에도 반환한 리스트에 요소를 추가/삭제하면 UnsupportedOperationException를 발생시킨다. (불변 보장)

자세한 내용
Collections.singletonList (something)은 불변이지만 Arrays.asList (something)는 List와 Array가 힙에서 조인되는 배열의 고정 된 크기 List 표현입니다.
Arrays.asList (something)는 비 구조적 변경을 허용하며 List와 결합 된 배열에 반영됩니다. 특정 인덱스에 대한 요소를 설정할 수 있지만 요소를 추가하고 추가하는 경우 UnsupportedOperationException을 throw합니다. Collections.singletonList (something)에 의해 리턴 된 List에 대한 변경은 UnsupportedOperationException이됩니다. 또한 Collections.singletonList (something)에 의해 반환 된 List의 용량은 지원되는 배열의 크기가 될 Arrays.asList (something)와 달리 항상 1입니다.

원문
Collections.singletonList(something) is immutable whereas Arrays.asList(something) is a fixed size List representation of an Array where the List and Array gets joined in the heap.

Arrays.asList(something) allows non-structural changes made to it, which gets reflected to both the List and the conjoined array. It throws UnsupportedOperationException for adding, removing elements although you can set an element for a particular index.

Any changes made to the List returned by Collections.singletonList(something) will result in UnsupportedOperationException.

Also, the capacity of the List returned by Collections.singletonList(something) will always be 1 unlike Arrays.asList(something) whose capacity will be the size of the backed array.

오늘도 좋은 IDE덕에 하나를 배웠습니다.. 인텔리제이 짱짱

레퍼런스


관련글 더보기

댓글 영역