[java] Java Collections singletonMap 메소드는 언제 사용합니까?

Java Collections singletonMap 이 필요한 이유를 이해할 수 없습니까? 다중 스레드 응용 프로그램에서 유용합니까?



답변

기본적으로 다음과 같이 할 수 있습니다.

callAPIThatTakesAMap(Collections.singletonMap(key, value));

이보다는 :

Map<KeyType, ValueType> m = new HashMap<KeyType, ValueType>();
m.put(key, value);
callAPIThatTakesAMap(m);

키 / 값 쌍이 하나 뿐인 경우 훨씬 더 좋습니다. 이러한 상황은 아마 매우 자주 발생하지 않지만, singleton()그리고 singletonList()매우 자주 유용 할 수 있습니다.


답변

일반적인 코드 (매개 변수 또는 메소드의 결과)에 맵을 전달해야하고이 특정 경우에 맵을 전달해야하는 경우에 유용합니다. 코드-전달하려는지도에는 키가 하나만 있습니다. 이 경우 SingletonMap은 본격적인지도 구현보다 효율적이며, 말해야하는 모든 내용을 생성자에서 말할 수 있기 때문에 프로그래머에게 더 편리합니다.


답변

또한 Collections.singletonMap ()에 의해 반환 된 SingletonMap 구현은 일반 HashMap보다 메모리 공간이 더 작습니다. 키와 값이라는 두 개의 멤버 필드 만 포함하면되는 반면 HashMap은 Node 개체와 다른 멤버 필드의 내부 배열을 유지합니다. 따라서 메모리에 이러한 맵을 많이 생성하는 경우 Collections.singletonMap ()을 사용하는 것이 현명한 선택이 될 것입니다.


답변

주로 편의성과 추상화를위한 것입니다. 일부 API는를 Collection인수로 사용하며 객체를 Set또는 Map.

singletonMap()그리고 singletonList()이후에 실제로 도입 된 singletonSet()자바 1.3에 있기 때문에이 singletonSet()유용하다는 것을 증명했다.


답변

많은 답변이 언제 알려졌지만 언제 not use it

원하는 경우 사용하지 마십시오put items later on .

의 구현을 넣어서 singletonMap던지기 때문에UnsupportedOperationException


답변

이것은 또 다른 예이지만 다음 코드 줄을 작성했습니다.

@Override public Map<Action, Promise<Boolean>> actOnResults() throws Exception {
    return Collections.singletonMap(Action.UPDATE_DATABASE, saver.save(results));
}

주의 @Override. 인터페이스는보다 일반적으로 여러 가지지도를 가져올 수 있습니다. 이 특정 인스턴스화는 항상 한 가지를 포함하는 맵을 반환합니다. 또한 맵의 키는 Enum입니다. 따라서 맵은 절대 크지 않아야하며 지정된 작업의 결과를 포함하기 만하면됩니다. 내 실제 예제에는 최대 5 개의 작업이 있으며이 인스턴스화는 그중 하나만 사용합니다.

완전 EnumSet하거나 EnumMap종종 이러한 경우에 적합하지만 위 코드에 비해 여전히 성가신 장황합니다.


답변