gpt4 book ai didi

java - java hashset中的项相等

转载 作者:行者123 更新时间:2023-12-01 07:39:34 26 4
gpt4 key购买 nike

我需要为一个项目实现 equals() 方法,该方法可以放入其制造商的哈希集中。该项目可以具有如下字段

class Item{
private String isbn;
private String name;
private double price;
...
}

class Maker{
private String name;
private Set<Item> items;
public Maker() {
super();
items = new HashSet<Item>();
}
...
}

如果我通过比较这三个字段来实现 equals 并根据这些字段编写 hashCode(),那么我会得到错误的结果

1.add item to hashset
2.modify the price of item
3.try to find if item exists in hashset


@Override
public boolean equals(Object o){
if(o == this){
return true;
}
if (!(o instanceof Item)){
return false;
}
Item a = (Item)o;
if(hasSameName(a) && hasSameIsbn(a) && hasSamePrice(a)){
return true;
}
else{
return false;
}
}

@Override
public int hashCode(){
int hash = 41 + this.isbn.hashCode();
hash = hash*41+ new Double(this.price).hashCode();
hash = hash*41 + this.name.hashCode();
return hash;
}

...
Set<Item> items = new HashSet<Item>();
Item item1 = new Item();
item1.setName("crystal bird");
item1.setIsbn("1111");
item1.setPrice(120.5);

items.add(item1);

System.out.println(items.contains(item1));//returns true
item1.setPrice(177.0);
System.out.println(items.contains(item1));//returns false

克服这个问题的解决方案是什么?我应该使 hashCode() 仅依赖于 isbn 并假设它在项目的生命周期内不会改变。

感谢任何帮助

标记。

最佳答案

是的,ISBN 是一个典型的自然标识符 - 仅将其用于 equals(..)hashCode()

关于java - java hashset中的项相等,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6908053/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com