Collections.singletonList()
Java에서 무엇을 사용 합니까? 하나의 요소가있는 목록을 반환한다는 것을 알고 있습니다. 왜 별도의 방법을 사용하고 싶습니까? 불변성은 여기서 어떤 역할을합니까?
편리한 방법이 아니라이 방법에 대한 유용한 유용한 사용 사례가 있습니까?
답변
javadoc에서는 이 말한다 :
“지정된 개체 만 포함하는 변경 불가능한 목록을 반환합니다. 반환 된 목록은 직렬화 가능합니다.”
물어:
왜 별도의 방법을 사용하고 싶습니까?
주로 편의상 … 명령문을 다음과 같이 작성하지 않아도됩니다.
- 빈리스트 객체를 생성
- 요소를 추가하고
- 불변 래퍼로 포장하십시오.
또한 조금 더 빠르거나 메모리를 절약 할 수 있지만 이러한 작은 절약 효과는 크지 않을 것입니다. (많은 수의 싱글 톤 목록을 만드는 응용 프로그램은 가장 드물게 들립니다.)
불변성은 여기서 어떤 역할을합니까?
이 방법의 사양 중 일부입니다. 위 참조.
편리한 방법이 아니라이 방법에 대한 유용한 유용한 사용 사례가 있습니까?
이 singletonList
방법 을 사용하는 것이 편리한 사용 사례가 있습니다 . 그러나 나는 일반적인 유스 케이스와 “특히 유용한”케이스를 (객관적으로) 구별하는 방법을 모른다.
답변
싱글 톤 메소드에 대한 하나의 보기 가 있습니다.
이러한 다양한 “단일”메소드가 단일 값을 해당 값의 콜렉션이 필요한 API에 전달하는 데 유용하다는 것을 알았습니다. 물론 이것은 전달 된 값을 처리하는 코드가 컬렉션에 추가 할 필요가 없을 때 가장 효과적입니다.
답변
javadoc에서
@param the sole object to be stored in the returned list.
@return an immutable list containing only the specified object.
예
import java.util.*;
public class HelloWorld {
public static void main(String args[]) {
// create an array of string objs
String initList[] = { "One", "Two", "Four", "One",};
// create one list
List list = new ArrayList(Arrays.asList(initList));
System.out.println("List value before: "+list);
// create singleton list
list = Collections.singletonList("OnlyOneElement");
list.add("five"); //throws UnsupportedOperationException
System.out.println("List value after: "+list);
}
}
코드가 읽기 전용 목록을 기대하지만 하나의 요소 만 전달하려는 경우에 사용하십시오. singletonList
(스레드) 안전하고 빠릅니다.
답변
불변의 질문에 대답하려면 :
Collections.singletonList
불변의리스트를 작성합니다. 변경할 수없는 목록 (변경 불가능한 목록이라고도 함)은 내용을 변경할 수 없습니다. 내용을 변경하려고하면 항목을 추가하거나 제거하는 방법에서 예외가 발생합니다.
단일 목록에는 해당 항목 만 포함되어 있으며 변경할 수 없습니다.
답변
Immutable / Singleton 콜렉션이 하나의 오브젝트 만 가지고 있고 더 이상 수정되지 않는 콜렉션을 참조하는 경우, 하나의 오브젝트 만 갖는 콜렉션 “UnmodifiableCollection”을 작성하여 동일한 기능을 수행 할 수 있습니다. Unmodifiable Collection을 통해 하나의 객체로 동일한 기능을 수행 할 수 있기 때문에 Singleton Collection은 어떤 특별한 용도로 사용됩니까?
답변
singletonList는 모든 객체의 인스턴스를 보유 할 수 있습니다. 객체 상태를 수정할 수 있습니다.
List<Character> list = new ArrayList<Character>();
list.add('X');
list.add('Y');
System.out.println("Initial list: "+ list);
List<List<Character>> list2 = Collections.singletonList(list);
list.add('Z');
System.out.println(list);
System.out.println(list2);
위와 같이 unmodifiableList를 정의 할 수 없습니다.