[java] Java의 Collections.singletonList ()를 사용합니까?

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를 정의 할 수 없습니다.


답변