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은 본격적인지도 구현보다 효율적이며, 말해야하는 모든 내용을 생성자에서 말할 수 있기 때문에 프로그래머에게 더 편리합니다.
주로 편의성과 추상화를위한 것입니다. 일부 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
종종 이러한 경우에 적합하지만 위 코드에 비해 여전히 성가신 장황합니다.
SingletonMap
편집했습니다. 나는 이후 변경 사항을 롤백했습니다;)