嗨,我正在尝试学习hashcode()和equals()方法的目的。我尝试了以下程序。
import java.util.HashMap;
public class LearnHascode {
public String name;
public int age;
LearnHascode(String na)
{
name = na;
}
public int hashCode()
{
return name.hashCode();
}
public boolean equals(LearnHascode obj)
{
return this.name.equals(obj.name);
}
public static void main(String[] args)
{
HashMap h = new HashMap();
LearnHascode ob1 = new LearnHascode("Prabha");
LearnHascode ob2 = new LearnHascode("Prabha");
h.put(ob1, v1);
h.put(ob2, v2);
System.out.println(h);
System.(h.out.printlncontainsKey(new LearnHascode("Prabha")));
}
}
输出:
{hash.LearnHascode@8ef7bdfc=Two, hash.LearnHascode@8ef7bdfc=one}
false
我有两个疑问:
1) 我认为HashMap将包含一个条目,因为两个对象(ob1和ob2)的hascode是相同的。有人能解释为什么HashMap中有两个条目吗?
2)为什么System.(h.out.printlncontainsKey(new LearnHascode("Pabha")));
返回false?
您没有正确实现hashCode()和equals()方法。
公务舱员工{
private int empId;
private String empName;
public Employee(int id, String name){
empId = id;
empName = name;
}
public int getEmpId() {
return empId;
}
public void setEmpId(int empId) {
this.empId = empId;
}
public String getEmpName() {
return empName;
}
public void setEmpName(String empName) {
this.empName = empName;
}
public int hashCode(){
System.out.println("In Hash Code");
int hashCode = 20;
hashCode *= this.empId;
hashCode += this.empName.hashCode();
return hashCode;
}
public boolean equals(Object obj){
System.out.println("In equals");
if(!(obj instanceof Employee)){
return false;
}
Employee emp = (Employee) obj;
return (emp.getEmpName().equals(this.getEmpName())) && (emp.getEmpId() == this.getEmpId());
}
}
你的equals()
方法是错误的,这会破坏HashMap
。equals()
的参数始终是对象
;您必须检查它是什么类型的对象
,并将其投射到方法体中。
hashCode()
值用于将对象分类,但equals()
用于确定两个对象是否实际上相同。您需要正确定义这两种方法才能使HashMap
正常工作。
下面的代码没有给我正确的答案。 这给出; 一般来说,若给定了点的数组列表,我们如何在数组中找到特定点的索引?
Apache Ignite序列化/反序列化与字段反序列化的顺序有关。我需要在Ignite缓存中放置一个“b”实例,如下所示: 如果我运行以下代码: b1来自缓存映射值:null 问题是子字段在父字段之前被反序列化,因此当Ignite反序列化B时,它首先创建一个空的B对象(带有null“name”和“mapofb”),然后尝试反序列化mapofb。它创建Hashtable,然后反序列化它包含的每个对
问题内容: 我是泛型新手,所以不确定我的问题的答案是否是真的。在下面的代码中,对一个对象条目的键进行大小写需要什么? 它似乎很容易被替换 更多参考: 问题答案: 这是一种极端的优化措施,对于通用编程实践来说可能不是必需的。这是一个可以回答您问题的讨论。下面的语句是从该帖子中复制的: 这是Doug Lea流行的一种编码风格。这是一个极端的优化,可能没有必要。您可以期望JIT进行相同的优化。(您可以尝
错误: 棱角版本:
Maven告诉我:您的过滤器与任何原型都不匹配。我的系统: null 我已采取的步骤是: Create my project Navigate to my project in command prompt and run the command: cd返回到“我的项目”文件夹并运行命令 运行该命令后,我会看到:
我正在尝试实现一个自定义的 Spring 存储库。我有界面: 其中RataEntity类是 它的实施 和以下存储库类 当我运行我的应用程序时,我得到这个错误: 未能创建方法公共摘要的查询java.util.Listit.aubay.PreliosPAN.repositories.RataRepositoryCustom.getRateFromTipo频率zaRimborso(java.lang.字