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



我想要一个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;
}
};

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

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 作为名称,将使用哈希代码存储实体。因此,请确保您使用简单且不可变的值作为键。

在您的情况下,我相信密钥应该是像1/2fraction字符串。

最新更新