繁体   English   中英

我们如何检查一个对象在 hashmap 中是否具有相同的值但不同的引用?

[英]How can we check if an object has same values but different references in hashmap?

我想要一个 HashMap 来存储一个分数和相似分数的数量。 假设我有两个数组作为我的输入

int[] numerator = {1, 4, 1, 2};
int[] denominator = {2, 8, 3, 2};

我有一个看起来像的 Fraction 类

static class Fraction{
    int x;
    int y;

    public Fraction(int _x, int _y){
        x = _x;
        y = _y;
    }
};

我通过循环遍历给定数组(简化必须简化的内容)并将其添加到哈希图中来创建分数,如下所示:

    int nSize = numerator.length;

    List<Fraction> fractions = new ArrayList<>();
    for(int i = 0; i < nSize; i ++){
        int div = gcd(numerator[i], denominator[i]);

        numerator[i] = numerator[i] / div;
        denominator[i] = denominator[i] / div;

        Fraction currentFraction = new Fraction(numerator[i], denominator[i]);

        fractions.add(currentFraction);

        if( map.containsKey(currentFraction) )
            map.put(currentFraction, map.get(currentFraction) + 1 );
        else
            map.put(currentFraction, 1);
    }

但是,而不是获取例如输入:

Fraction: 1/2 has value:2
Fraction: 2/3 has value:1
Fraction: 3/1 has value:1

我得到

Fraction: 1/2 has value:1
Fraction: 1/2 has value:1
Fraction: 2/3 has value:1
Fraction: 3/1 has value:1

我知道 hashmap 将分数保存为不同的对象,因为它们具有不同的引用(即使它们具有相同的分子和分母),但是我怎样才能实现上述结果?

HashMap 作为名称,将使用哈希码存储实体。 因此,请确保您使用简单且不可变的值作为键。

在您的情况下,我认为关键应该是像1/2等这样的fraction字符串。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM