HashMap与以下方法中的数组性能差异

时间:2017-07-23 14:55:15

标签: java hashmap

为了解决动态编程问题,我使用了两种方法来存储表项,一种使用多维数组ex:tb [m] [n] [p] [q]和其他使用hashmap并使用1st方法的索引来制作字符串用作" m,n,p,q"中的键。但是在一个输入上,第一个方法在2分钟内完成,而其他方法需要超过3分钟。  如果hashmap和array的访问时间渐近等于为什么性能差异如此之大?

1 个答案:

答案 0 :(得分:0)

this answer

  

HashMap使用下面的数组,因此它永远不会比使用更快   数组正确。

你是对的,数组和HashMap的访问时间在O(1)中,但这只是说它与输入大小或集合的当前大小无关。但它并没有说明每项行动必须要做的实际工作。

要访问数组的条目,您必须计算条目的内存地址。这很容易array's memory address + (index * size of entity)

要访问HashMap的条目,首先必须散列给定的密钥(需要很多cpu循环),然后使用包含列表的哈希访问HashMap数组的条目(取决于实现) HashMap的详细信息),最后你必须在列表中线性搜索正确的条目(这些列表在大多数情况下都非常短,所以它被视为O(1))。

所以你看到它更像是O(10)的数组和O(5000)哈希映射。或者更准确的T(Array access)表示数组,T(hashing) + T(Array access) + T(linear search)表示HashMaps,T(X)表示实际作用时间x