我用3個參數創建了一個Employee類。如何檢查存儲在散列表中的對象中是否存在字符串?
- 編號
- 名稱
- 年齡
要求:搜索基於名稱。這是所有員工都有唯一名稱的情況。它必須添加鍵爲id的對象。在極少數情況下,需要根據名稱進行搜索。
我做了什麼:
在我重寫的hashCode和equals方法的類。
我加入這些對象的列表到HashMap中與ID爲鍵和值作爲Employee對象
但同時增加或從一個HashMap這兩種方法不會被調用
那麼,什麼是搜索在hasmap方面使用這些方法?
Employee類
public class Employee {
private int id;
private String name;
private int age;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public int hashCode() {
return name.hashCode();
}
public boolean equals(Employee emp) {
if (emp == null)
return false;
else if (emp.name.equalsIgnoreCase(this.name))
return true;
else
return false;
}
}
主要方法:
public class HashMapTest {
public static void main(String[] args) {
Employee emp1=new Employee();
emp1.setId(1);
emp1.setName("Maclean");
emp1.setAge(24);
Employee emp2=new Employee();
emp2.setId(2);
emp2.setName("Sampath");
emp2.setAge(25);
Employee emp3=new Employee();
emp3.setId(3);
emp3.setName("Achar");
emp3.setAge(27);
Employee emp4=new Employee();
emp4.setId(4);
emp4.setName("Sudheer");
emp4.setAge(25);
Employee emp5=new Employee();
emp5.setId(5);
emp5.setName("Kunder");
emp5.setAge(25);
HashMap<Integer, Employee> empmap=new HashMap();
empmap.put(emp1.getId(), emp1);
empmap.put(emp2.getId(), emp2);
empmap.put(emp3.getId(), emp3);
empmap.put(emp4.getId(), emp4);
empmap.put(emp5.getId(), emp5);
Employee emp=new Employee();
emp.setName("Maclean");
System.out.println(empmap.containsValue(emp));
System.exit(1);
}
}
更新解決方案:
感謝所有的答案。
1. hashCode方法被調用僅當鍵是一個對象,並且該方法的關鍵類
2.等於(僱員EMP)內是否存在是造成過載的功能,而不是覆蓋。我應該用平等的(對象o)
變化的代碼來解決問題
@Override
public boolean equals(Object o) {
if (o == null)
return false;
if (!(o instanceof Employee))
return false;
Employee emp = (Employee) o;
if (emp.name.equalsIgnoreCase(this.name))
return true;
else
return false;
}
如果'id'是唯一屬性,不應該'hashCode'依據是不是叫什麼名字?而且,在作爲映射關鍵的對象上調用'hashCode'方法,即id,而不是值,即Employee。 – 2015-03-03 11:01:50