Java 即使userdefind对象值相同,如何从hashmap中获取单个条目
我有hashmap,这个人有一个整数值,我在映射中放了两个person对象,我只需要一个条目Java 即使userdefind对象值相同,如何从hashmap中获取单个条目,java,collections,Java,Collections,我有hashmap,这个人有一个整数值,我在映射中放了两个person对象,我只需要一个条目 class Employee{ private int id; public Employee(int i) { // TODO Auto-generated constructor stub this.id = i; } } public class HashMapExample { public static void main(S
class Employee{
private int id;
public Employee(int i) {
// TODO Auto-generated constructor stub
this.id = i;
}
}
public class HashMapExample {
public static void main(String[] args) {
HashMap<Employee,Integer> map =new HashMap<Employee,Integer>();
map.put(new Employee(101),10);
map.put(new Employee(101),20);
System.out.println(map);
Employee emp;
for(Map.Entry<Employee,Integer> entry : map.entrySet()){
System.out.println(entry.getKey()+" "+entry.getValue());
emp = entry.getKey();
System.out.println(emp.equals(emp));
emp.hashCode();
}
}
}
class员工{
私有int-id;
公职人员(国际一级){
//TODO自动生成的构造函数存根
这个id=i;
}
}
公共类HashMapExample{
公共静态void main(字符串[]args){
HashMap=newHashMap();
地图放置(新员工(101),10);
地图放置(新员工(101),20);
系统输出打印项次(map);
员工环境管理计划;
对于(Map.Entry:Map.entrySet()){
System.out.println(entry.getKey()+“”+entry.getValue());
emp=entry.getKey();
系统输出println(emp等于(emp));
emp.hashCode();
}
}
}
我需要从这两个条目中获得一个条目。因为HashMap在内部使用哈希表,所以不可能,如果需要这种行为,需要在employee类中实现hashcode和equals方法,这些方法必须为同一对象返回不同的值(在您的情况下)对象来实现您想要的。我不是很确定您想要什么,但假设Shmosel的猜测是正确的,您只想确保第二个
put
覆盖第一个,您可以在Employee
类中重写对象的equals
和hashCode
方法:
import java.util.HashMap;
class Employee{
private int id;
public Employee(int i) {
this.id = i;
}
public int getId()
{
return id;
}
@Override
public boolean equals(Object o) {
return this.id == ((Employee) o).id;
}
@Override
public int hashCode() {
Integer idInt = new Integer(id);
return idInt.hashCode();
}
}
public class HashMapExample {
static HashMap<Employee,Integer> hm = new HashMap<>();
public static void main(String args[]) {
hm.put(new Employee(100),10);
hm.put(new Employee(100), 20);
hm.put(new Employee(200), 50);
for (Employee e: hm.keySet()) {
System.out.println("Employee " + e.getId() + ", value = " + hm.get(e));
}
}
}
不能将同一个键映射到2个值。你想做什么?啊,你想理解为什么它没有被覆盖,是吗?你需要实现equals()
和hashCode()Employee
中的
将其用作一个键。@shmosel在试图理解一个措辞模糊的问题时做得非常出色。请解释你想做什么以及你到底面临什么问题。我很好奇你认为OP试图做什么。我认为OP试图理解为什么第二个put
没有覆盖首先,正如您所猜测的,您能否共享一些示例代码库,以便它对您的应用程序有所帮助me@DavidChoweller不,大卫,你所理解的与OP所想的不同。谢谢@David,这就是我所期待的。
Employee 100, value = 20
Employee 200, value = 50