Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java:用于少量键值对的最佳集合_Java_Collections - Fatal编程技术网

Java:用于少量键值对的最佳集合

Java:用于少量键值对的最佳集合,java,collections,Java,Collections,我目前正在创建一个石头剪刀程序的原型,我需要以整数/字符串格式存储选择 在搜索速度和内存使用方面,“最佳”收藏是什么?前提是计算机将选择一个随机数,然后搜索键值对以找到合适的选择名称,供以后在程序中使用 编辑: 为了澄清,集合中最多有5个键值对,以整数作为键 根据评论进一步澄清。我正在寻找少量对的键/值集合(最多5个)HashMap将是最好的get()具有O(1)时间复杂性。O(1)表示独立于元素数量,即常数。如果键是整数,则数组列表或哈希映射就可以了 两者都是O(1)并且需要唯一的键。 否则,

我目前正在创建一个石头剪刀程序的原型,我需要以整数/字符串格式存储选择

在搜索速度和内存使用方面,“最佳”收藏是什么?前提是计算机将选择一个随机数,然后搜索键值对以找到合适的选择名称,供以后在程序中使用

编辑:

为了澄清,集合中最多有5个键值对,以整数作为键


根据评论进一步澄清。我正在寻找少量对的键/值集合(最多5个)

HashMap将是最好的
get()
具有
O(1)
时间复杂性。O(1)表示独立于元素数量,即常数。

如果键是
整数,则
数组列表
哈希映射
就可以了

两者都是O(1)并且需要唯一的键。


否则,如果它们是
字符串
HashMap
仅适用。

如果您需要
映射
,而不需要
分类映射
,则几乎总是正确的选择


注意,of
HashMap
有一个参数告诉它映射的初始大小。构造函数将使用它为映射分配合理的内存量,如果映射的大小可能小于默认大小().

我建议这是使用
enum
s和
EnumMap
的绝佳机会,它针对您正在考虑的场景类型进行了优化,即一组离散的可能键。

这是第一个想到的集合,我只是想知道是否有比这更小的内存占用that@jbailie1991-考虑到您只有几个要素,我认为最好考虑性能(速度)而不是内存<例如,code>TreeMap
是O(log(n))。正如我在上面所写的,我认为hashmap不是O(1),因为不同对象的hashvalue并不总是不同的。如果你运气不好,所有五个实体都可能有相同的hashvalue。在这种情况下,你会有O(n)@treeno-好吧,是的,但是OP将在任何地图上运行taht风险。两者都是O(1)真的。但是array/arrayList可能不适合OP的需要,他指的是少量的键,比如说我们只有两个:
1
Integer.max
,然后使用array我们需要初始化一个具有
int.max
容量的数组。@Kent这一点很好。只有数字是连续的,ArrayList才有意义。ArrayList不是键/值collection@Marco谁说ArrayList是一个键/值集合?索引将充当键。“适合少量键值对的最佳集合”--也许你指的是ArrayList?//“集合中的大多数5个键值对”如果这些值是固定的,您也可以使用带有属性的枚举。速度和内存使用对于一个石头剪刀程序来说真的是一个问题吗?当您只有5个值时,为什么还要关心速度和内存使用?据我所知,没有一个系列在与5个条目一起使用时会在速度或大小上产生任何明显差异。听说过“过早优化”这个词吗?你需要添加更多关于如何实现它的信息。提高效率的原因是个人偏好,我希望它使用尽可能少的内存并尽可能高效地运行。读完这句话后,我意识到在讨论java时,这可能有点矛盾