Java 以下方法中的HashMap与阵列性能差异
为了解决动态规划问题,我使用了两种方法来存储表项,一种是使用多维数组ex:tb[m][n][p][q],另一种是使用hashmap,并使用第一种方法的索引使字符串用作键,如“m,n,p,q”中所示。但对于一种输入,第一种方法在2分钟内完成,而另一种方法需要3分钟以上。 若hashmap和数组的访问时间都是渐近相等的,为什么性能上会有这么大的差异 像: HashMap在下面使用一个数组,所以它的速度永远不会比使用 正确地创建数组 您是对的,数组和HashMap的访问时间是O(1),但这只是说它与输入大小或集合的当前大小无关。但它并没有说明每一个动作必须完成的实际工作 要访问数组的条目,必须计算条目的内存地址。这很容易,因为Java 以下方法中的HashMap与阵列性能差异,java,hashmap,Java,Hashmap,为了解决动态规划问题,我使用了两种方法来存储表项,一种是使用多维数组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的可能重复说明了这一点呃我自己。