我什么时候会使用java Collections的singletonMap方法?

use*_*818 76 java collections map

我不明白你为什么需要java Collections singletonMap?它在多线程应用程序中有用吗?

Mic*_*rdt 114

基本上,它允许您这样做:

callAPIThatTakesAMap(Collections.singletonMap(key, value));
Run Code Online (Sandbox Code Playgroud)

而不是这个:

Map<KeyType, ValueType> m = new HashMap<KeyType, ValueType>();
m.put(key, value);
callAPIThatTakesAMap(m);
Run Code Online (Sandbox Code Playgroud)

当你只有一个键/值对时更好.这种情况可能不会经常出现,但singleton()singletonList()可能频繁是有用的.

  • 我一直在使用Spring的命名参数JDBC模板的DAO中使用singletonMap.如果您有一个简单的选择语句,例如"从bar中选择foo,其中id =:barId",那么您需要一个带有单个键值对的参数映射,barId = 123.这是使用singletonMap()的好地方. (11认同)
  • 如果任何 API 将映射作为输入,并且我正在使用 Collections.singleton(key,value) ,那么我将传递不可变映射,这可能对该 API 不利,因为 API 可能会向此映射添加更多元素,并且在在这种情况下,什么也做不了,因为它是不可变的。 (2认同)
  • @AKS:理论上是的,但在实践中,只读访问更为常见,从API文档中应该清楚条目是否被添加到作为参数传递的映射中. (2认同)

Hen*_*olm 14

如果您需要将映射传递给某些通用代码(作为参数,或者作为方法的结果)并且您知道在这种特定情况下 - 但是在其他情况下可能不会将映射传递给相同的通用代码 - 您要传递的地图只有一个密钥.在这种情况下,SingletonMap比完整的地图实现更有效,对程序员来说也更方便,因为你需要说的一切都可以在构造函数中说出来.


gar*_*ary 7

此外,Collections.singletonMap()返回的SingletonMap实现具有比常规HashMap更小的内存占用.它只需要包含两个成员字段:键和值,而HashMap维护一个Node对象的内部数组和其他成员字段.因此,如果您在内存中创建了大量这些映射,那么使用Collections.singletonMap()将是一个谨慎的选择.


Bas*_*ANI 6

很多答案告诉你什么时候,但我想指出什么时候not use it

如果你想用就put items later on不要使用它

因为 put 执行singletonMap会抛出UnsupportedOperationException


tsk*_*zzy 5

主要是为了方便和抽象。某些 API 采用 aCollection作为参数,如果有一种简单的方法将对象转换为 aSet或,那就太好了Map

singletonMap()singletonList()实际上是在 Java 1.3 之后引入的,因为singletonSet()事实singletonSet()证明它很有用。

  • 没有 singletonSet() 方法,它只是调用 singleton() (2认同)