在我读到的关于hashmap的许多文章中,我发现这个语句很常见而没有任何解释“我们将每个新元素存储在链表的头部,以避免尾部遍历”。
当我们将Key和Value对象传递给Java HashMap上的put()方法时,HashMap实现调用Key对象上的hashCode方法,并将返回的哈希码应用到自己的哈希函数中,以找到存储Entry对象的索引。找到新条目的索引后,我们假设索引已经包含条目,在这种情况下,密钥的哈希被比较,密钥本身通过equals方法进行比较,如果没有找到匹配,我们需要遍历链表。
无论如何我们需要遍历链表,无论我们最后添加条目还是头部。在头部添加元素可以避免尾部遍历吗?
莫里斯佩里在评论中已经得到了答案。此编辑试图让问题更清晰。
答案 0 :(得分:0)
HashMap是一个链表的数组。当您放入一个新条目时,您计算新模块的hashCode()模数为数组(哈希表)的大小,然后您必须遍历该位置的列表以确保该键不在列表中。如果不是,则可以将新条目添加到列表中。