此示例中有关HashMap哈希算法的说明

问题描述 投票:1回答:3

我正在尝试解决这个问题:

给出一个只有3个唯一数字的整数数组,它们会在O(n)时间中以升序(及其各自的频率)打印数字。

我想不使用counting sort算法来解决它,所以我想我可以做一个for loop并将数字插入到HashMap中,然后通过loop插入HashMap entrySet并打印所需的信息。

这里是功能:

public static void printOut(int[] arr){
        Map<Integer,Integer> hm=new HashMap<Integer,Integer>();
        for(int num : arr){
            if(hm.containsKey(num)){
                hm.put(num,hm.get(num)+1);
            }else{hm.put(num,1);}
        }
        for(Map.Entry<Integer,Integer> entry : hm.entrySet()){
            System.out.println("Key= "+entry.getKey()+" Value= "+entry.getValue());
        }
}

当我的数组为[[3, 3, 2, 1, 3, 2, 1]]时,它起到了欺骗的作用>

但是上述数组不应该导致任何冲突,因此我尝试使用应该导致冲突的数组,我测试了我的函数的数组之一是:[6,6,9,9,6,3,9]但是我的函数仍然以升序打印Keys订单,这让我感到困惑,因为我认为当KeyHashMap是整数时,哈希码应为hashIndex = key % noOfBuckets,因此当我将数字6, 9 and 3作为我的HashMap keys时,我以为会有冲突,我的函数应该打印(基于上面使用的数组):

Key= 6 Value= 3
Key= 9 Value= 3
Key= 3 Value= 1 

但是打印出来是:

Key= 3 Value= 1
Key= 6 Value= 3
Key= 9 Value= 3

任何人都可以向我解释为什么我要为要解决的问题找到正确的解决方案,而不是我期望的答案吗?

谢谢。

我正在尝试解决这个问题:给定只有3个唯一数字的整数数组,它们会在O(n)时间中以升序(及其各自的频率)打印数字。我想解决...

java hashmap collision hashcode
3个回答
2
投票
    哈希映射/哈希表中的
  1. “ Collision”术语是两个不同键具有相同哈希码的情况。 HashMap的Java实现使用List / RB-tree解决冲突,但是当您真正拥有3个整数键时,这绝对不是您的情况。

0
投票

摘录自实施说明


-1
投票
我不确定您所说的“冲突”到底是什么意思,但是正如您已经指出的,如果您阅读了HashMap(https://docs.oracle.com/javase/8/docs/api/java/util/HashMap.html)的文档,则没有关于排序的声明:
© www.soinside.com 2019 - 2024. All rights reserved.