我什么时候会使用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为参数,有一种简单的方法可以将对象转换为SetMap

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个动作,而这个实例化只使用其中一个动作。

为了完整起见,EnumSetEnumMap在这些情况下通常是合适的,但与上面的代码相比,这些仍然令人烦恼地冗长。

以上是关于我什么时候会使用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()的作用和好处以及要注意的地方