Java 如何检查hashmap中的对象是否具有相同的值但引用不同?

Java 如何检查hashmap中的对象是否具有相同的值但引用不同?,java,hashmap,Java,Hashmap,我想要一个HashMap,它存储一个分数和相似分数的数量。 假设我有两个数组作为输入 int[] numerator = {1, 4, 1, 2}; int[] denominator = {2, 8, 3, 2}; 我有一个分数类,看起来像 static class Fraction{ int x; int y; public Fraction(int _x, int _y){ x = _x; y = _y; } }; 我通

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

int[] numerator = {1, 4, 1, 2};
int[] denominator = {2, 8, 3, 2};
我有一个分数类,看起来像

static class Fraction{
    int x;
    int y;

    public Fraction(int _x, int _y){
        x = _x;
        y = _y;
    }
};
我通过循环给定数组(简化必须简化的内容)并向hashmap中添加分数来创建分数,如下所示:

    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);
    }
我明白了


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

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


在您的情况下,我认为关键应该是
分数
字符串,如
1/2
等。

尝试覆盖分数的等号和hashCode函数这将是一个选项,但这对不同类型的对象不起作用,是吗?像更复杂的一样。:)如果希望将复杂对象作为键,则需要确保它们具有相同的哈希代码。因此,在使用它们时,重写hashcode方法和equals方法。
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