Java 如何检查hashmap中的对象是否具有相同的值但引用不同?
我想要一个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; } }; 我通
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