【问题标题】:Why HashMap is not good for a big dataset of integer keys?为什么 HashMap 不适合整数键的大数据集?
【发布时间】:2020-06-02 13:19:04
【问题描述】:

我有一个由 N 个整数组成的非空数组 A。该数组包含奇数个元素,并且该数组的每个元素都可以与另一个具有相同值的元素配对,除了一个未配对的元素。

例如,在数组 A 中,如下所示:

A[0] = 9 , A[1] = 3 , A[2] = 9 , A[3] = 3 , A[4] = 9 , A[5] = 7 , A[6] = 9

我需要编写一个函数来返回未配对元素的值。

我的第一个本地解决方案之一是创建一个具有唯一键的哈希图结构 - 给定数组的 N 个整数,如果哈希图中已经存在键,则遍历数组添加值。毕竟,在它的 value 字段中只有 1 的键是未配对的元素。

我知道 Integer 的哈希码是它的 int 唯一值... 所以我希望不会有不同整数的重复键..所以我认为不同整数不会有重复键..但是对于大量数据,这个解决方案不起作用......我认为这个与负载系数有关。 但我上不去。我不需要替代解决方案,因为我已经有了它,我只想了解当我们使用大量整数键时 hashmap 有什么问题.. 这是我的代码,非常感谢!: 映射 a = new HashMap();

       for(int i=0;i<A.length;i++) {

           if(a.containsKey(A[i])){
               a.put(A[i], a.get(A[i])+1);     
           }else  a.put(A[i], 1);      

       }

       for (Integer i : a.keySet()) {
              if(a.get(i)==1)
                  return i;
            }

       return -1;

enter image description here

【问题讨论】:

    标签: java arrays


    【解决方案1】:

    我认为这与负载系数有关。

    不,问题不在于HashMap,而在于您使用它的方式。

    您的解决方案不完整,因为它假定所有对都是唯一的。即它假设最多可以有一对 9(在您发布的示例中不是这样,其中包含 2 对 9)。

    有多个相同的配对不一定会导致错误的答案,但是什么 例如,如果有 3 个 9,其中两个是配对的,但第三个不是?您的解决方案找不到它,因为 a.get(9) 将返回 3,但您检查它是否等于 1

    而不是检查

    if(a.get(i)==1)
    

    你应该检查它是否奇怪

    if(a.get(i)%2==1)
    

    【讨论】:

    • 好吧,你的意思是,如果我有几对这把钥匙,但它仍然不奇怪..就像 {5,5,5,3,3},很好,没想到这))检查..
    • 伊兰!!!非常感谢!!我知道可能有很多不唯一的对,但我错过了除了一个奇数之外,可能还有相同的一对相同的数字。它现在向我展示了 100% 的任务分数、正确性和性能。 Kol ha kavod!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-03-15
    • 1970-01-01
    • 2012-12-29
    • 2018-01-14
    • 1970-01-01
    • 1970-01-01
    • 2020-08-15
    相关资源
    最近更新 更多