[英]Whether I need to define my own hash and equal method?
如果我需要使用InfoName
作為HashMap
的key
,我是否需要定義自己的hashCode()
和equals()
方法? 我認為沒有必要,因為String name
變量足以確保InfoName
每個對象都不同。
public class InfoName {
enum Type {
company, product;
}
public String name;
public Type type;
public InfoName(String name, Type type) {
this.name = name;
this.type = type;
}
}
String“name”變量足以確保InfoName的每個對象都不同
如果您只想在InfoName
使用該name
,那么只需將String
type name
作為key
因為它已經覆蓋了equals()
和hashCode()
。
要么
您需要覆蓋InfoName
類中的equals()
和hashCode()
,否則JVM將如何知道您用於散列和相等性檢查的屬性/條件。
如果您確定將InfoName作為密鑰,則需要覆蓋兩者。 你有類似的東西
public class Test {
enum Type {
company, product;
}
public String name;
public Type type;
public Test(String name, Type type) {
this.name = name;
this.type = type;
}
@Override
public boolean equals(Object o) {//or do what you like
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Test test = (Test) o;
if (!name.equals(test.name)) return false;
if (type != test.type) return false;
return true;
}
@Override
public int hashCode() {
int result = name.hashCode();
result = 31 * result + type.hashCode();
return result;
}
}
基本上,您的編輯器提供了重寫hashcode和equals的功能。 看看這里為什么我需要覆蓋Java中的equals和hashCode方法? 在此輸入鏈接描述
我認為沒有必要,因為String“name”變量足以確保InfoName的每個對象都不同。
我建議不要使用name
作為哈希鍵,因為它似乎是一個糟糕的候選人。 我的意思是你有多個具有相同產品名稱的對象嗎? 在這種情況下,你會遇到很多碰撞。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.