Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/370.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 以下方法中的HashMap与阵列性能差异_Java_Hashmap - Fatal编程技术网

Java 以下方法中的HashMap与阵列性能差异

Java 以下方法中的HashMap与阵列性能差异,java,hashmap,Java,Hashmap,为了解决动态规划问题,我使用了两种方法来存储表项,一种是使用多维数组ex:tb[m][n][p][q],另一种是使用hashmap,并使用第一种方法的索引使字符串用作键,如“m,n,p,q”中所示。但对于一种输入,第一种方法在2分钟内完成,而另一种方法需要3分钟以上。 若hashmap和数组的访问时间都是渐近相等的,为什么性能上会有这么大的差异 像: HashMap在下面使用一个数组,所以它的速度永远不会比使用 正确地创建数组 您是对的,数组和HashMap的访问时间是O(1),但这只是说它与输

为了解决动态规划问题,我使用了两种方法来存储表项,一种是使用多维数组ex:tb[m][n][p][q],另一种是使用hashmap,并使用第一种方法的索引使字符串用作键,如“m,n,p,q”中所示。但对于一种输入,第一种方法在2分钟内完成,而另一种方法需要3分钟以上。 若hashmap和数组的访问时间都是渐近相等的,为什么性能上会有这么大的差异

像:

HashMap在下面使用一个数组,所以它的速度永远不会比使用 正确地创建数组

您是对的,数组和HashMap的访问时间是O(1),但这只是说它与输入大小或集合的当前大小无关。但它并没有说明每一个动作必须完成的实际工作

要访问数组的条目,必须计算条目的内存地址。这很容易,因为
数组的内存地址+(索引*实体大小)

要访问HashMap的条目,首先必须散列给定的键(需要许多cpu周期),然后使用包含列表的散列访问HashMap数组的条目(取决于HashMap的实现细节),最后必须线性搜索列表以查找正确的条目(这些列表在大多数情况下都很短,因此被视为O(1))


所以你可以看到它更像是O(10)表示数组和O(5000)散列映射。或者更精确地说,
T(数组访问)
表示数组,而
T(散列)+T(数组访问)+T(线性搜索)
表示具有
T(X)的散列映射
作为实际行动时间
x

我们需要一些代码来分析它的性能。有人能告诉我们否决票的原因吗?虽然我不知道确切的原因,但可能是因为您最初的问题没有遵循这些。根据一般经验,问题应该按照您要求的方式编写忙碌的同事。介绍问题,提供上下文,解释你已经尝试过的内容,并尝试使其重现。问题应尽可能具体,答案应适用于尽可能多的受众。最初缺少代码可能是最好的猜测。@SumiStraessle的可能重复说明了这一点呃我自己。