java - HashMap 速度越小 map 越快

标签 java data-structures hashmap k-means

这可能是一个奇怪的问题,但它是基于我使用 Java Map 得到的一些结果 - 在 HashMap 的情况下,本地图较小时,元素检索速度是否更快?

我有一部分代码使用了 HashMapcontainsKeyget(key) 方法,如果 map 中的元素数量较小?是这样吗?

据我所知,HashMap 使用一些散列函数来访问映射的特定字段,并且有版本中该字段是对链表的引用(因为某些键可以映射到相同的值)或 map 中的其他字段,当完全静态实现时。

这是否正确 - 如果 Map 的元素越少,速度会更快?

我需要用一个具体的例子来扩展我的问题。

我有 2 种情况,两者的元素总数相同。

  • 在第一种情况下,我有 10 个 HashMap,我不知道元素是如何分布的。该部分算法执行时间为141ms。
  • 在第二种情况下,我有 25 个 HashMap,元素总数相同。相同算法的执行时间为69ms。

在这两种情况下,我都有一个遍历每个 HashMap 的 for 循环,试图找到相同的元素,如果存在则获取元素。

会不会是执行时间更小,因为HashMap内部的单个查找更小,所以有sum吗?

我知道这很奇怪,但是这样的事情有可能吗,还是我做错了什么?

考虑了 Map(Integer,Double)。很难说元素的分布是什么,因为它实际上是KMeans聚类算法的实现,元素是聚类质心的表示。这意味着它们将主要取决于算法的初始化。并且元素的总数不会大部分相同,但我已尝试简化问题,如果这有误导性,我们深表歉意。

最佳答案

碰撞次数对减速具有决定性作用。

假设一个数组的大小,散列码对大小取模然后指向放置对象的索引。具有相同索引的两个对象发生碰撞。

在元素数量方面拥有大容量(数组大小)会有所帮助。

HashMap有带有额外设置的重载构造函数。

public HashMap(int initialCapacity,
               float loadFactor)

构造一个具有指定初始容量和加载因子的空 HashMap。

您可以尝试一下。

对于与 HashMap 一起使用的特定键类,拥有良好的 hashCode 也有帮助。哈希码是一个独立的数学领域。

当然,使用更少的内存有助于处理器/物理内存级别,但我怀疑在这种情况下会产生影响。

关于java - HashMap 速度越小 map 越快,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26026424/

相关文章:

data-structures - 在 Neo4j 中创建独特的结构,它们的节点是另一个结构的一部分

java - Java-7 中的自定义包装异常与 Multi-Catch

java - 每次我想调用 doInBackground() 时是否应该创建一个新的 Java SwingWorker 实例?

java - java应用程序在windows和os x上的可行性

java - 如何将 hashmap 值传递给函数

java - 如何调用枚举函数?

java - 如何在Java中将for循环输出分离到数组中?

java - 使用 jackson xml 映射器将 xml 反序列化为 pojo

algorithm - 如果树分布在多台机器上,二叉树是否是二叉搜索树

algorithm - 在处理一组复合数据类型时,排序算法是否表现出更多的不稳定性?