我什么时候会使用java Collections的singletonMap方法?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了我什么时候会使用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()
实际上是在Java 1.3中的singletonSet()
之后引入的,因为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
在这些情况下通常是合适的,但与上面的代码相比,这些仍然令人烦恼地冗长。
以上是关于我什么时候会使用java Collections的singletonMap方法?的主要内容,如果未能解决你的问题,请参考以下文章
列举几个关于Java Collections的常见问题并给出答案
为啥 Java Collections 不能直接存储 Primitives 类型?
JavaJava中的Collections类——Java中升级版的数据结构
Java之Collections.emptyList()emptySet()emptyMap()的作用和好处以及要注意的地方
Java之Collections.emptyList()emptySet()emptyMap()的作用和好处以及要注意的地方
Java之Collections.emptyList()emptySet()emptyMap()的作用和好处以及要注意的地方