发布于2023-06-07 19:58 阅读(1242) 评论(0) 点赞(25) 收藏(1)
我有一个查询,我已经开发了一个 pojo,在那个 pojo 中,我自定义了 hashcode 方法和 equals 方法,如下所示,在名为 Emp.java 的 pojo 中,现在我的查询是我正在集合中添加该类型的对象我还单独开发了集合,现在我还没有利用泛型的优势,稍后我将对其进行自定义,但现在我在集合中添加对象但是在集合的结果中显示了重复对象,理想情况下唯一对象必须显示请告诉我如何克服这个问题..
我的 pojo 是..
class Emp implements Comparable
{
String name,job;
int salary;
public Emp(String n,String j,int sal)
{
name=n;
job=j;
salary=sal;
}
public void display()
{
System.out.println(name+"\t"+job+"\t"+salary);
}
public boolean equals(Object o)
{
Emp p=(Emp)o;
return this.name.equals(p.name)&&this.job.equals(p.job)&&this.salary==p.salary;
}
public int hashCode()
{
return name.hashCode()+job.hashCode()+salary;
}
public int compareTo(Object o)
{
Emp e=(Emp)o;
return this.name.compareTo(e.name);
//return this.job.compareTo(e.job);
// return this.salary-e.salary;
}
}
我的课程是..
public class empset {
public static void main(String args[])
{
Set s1=new HashSet();
s1.add(new Emp("saral","coder",2300));
s1.add(new Emp("wer","der",2560));
s1.add(new Emp("Sachin","Programmer",24000));
s1.add(new Emp("Sachin","Programmer",24000));
System.out.println("There are "+s1.size()+" elements in the set.");
System.out.println("Content of set are : ");
Iterator itr=s1.iterator();
while(itr.hasNext())
{
Emp e=(Emp)itr.next();
System.out.print(e.hashCode()+"\t");
e.display();
}
}
执行后我得到的结果是..
There are 4 elements in the set.
Content of set are :
15075785 wer der 2560
28921555 saral coder 2300
9209934 Sachin Programmer 24000
4766781 Sachin Programmer 24000
但理想情况下,集合应该删除重复项,所以我应该得到的结果是..
There are 3 elements in the set.
Content of set are :
15075785 wer der 2560
28921555 saral coder 2300
9209934 Sachin Programmer 24000
由于 sachin 名称重复并且在集合中应将其视为一次
我尝试了您的代码,修复了一些明显的编译错误,并成功删除了第四个元素:
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
public class Empset
{
static class Emp implements Comparable
{
String name,job;
int salary;
public Emp(String n,String j,int sal)
{
name=n;
job=j;
salary=sal;
}
public void display()
{
System.out.println(name+"\t"+job+"\t"+salary);
}
public boolean equals(Object o)
{
Emp p=(Emp)o;
return this.name.equals(p.name)&&this.job.equals(p.job)&&this.salary==p.salary;
}
public int hashCode()
{
return name.hashCode()+job.hashCode()+salary;
}
public int compareTo(Object o)
{
Emp e=(Emp)o;
return this.name.compareTo(e.name);
}
}
public static void main(String args[])
{
Set s1=new HashSet();
s1.add(new Emp("saral","coder",2300));
s1.add(new Emp("wer","der",2560));
s1.add(new Emp("Sachin","Programmer",24000));
s1.add(new Emp("Sachin","Programmer",24000));
System.out.println("There are "+s1.size()+" elements in the set.");
System.out.println("Content of set are : ");
Iterator itr=s1.iterator();
while(itr.hasNext())
{
Emp e=(Emp)itr.next();
System.out.print(e.hashCode()+"\t");
e.display();
}
}
}
结果
There are 3 elements in the set.
Content of set are :
199998062 Sachin Programmer 24000
219509 wer der 2560
204044336 saral coder 2300
作者:黑洞官方问答小能手
链接:http://www.javaheidong.com/blog/article/674280/1bd5d07d152651479dc4/
来源:java黑洞网
任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任
昵称:
评论内容:(最多支持255个字符)
---无人问津也好,技不如人也罢,你都要试着安静下来,去做自己该做的事,而不是让内心的烦躁、焦虑,坏掉你本来就不多的热情和定力
Copyright © 2018-2021 java黑洞网 All Rights Reserved 版权所有,并保留所有权利。京ICP备18063182号-2
投诉与举报,广告合作请联系vgs_info@163.com或QQ3083709327
免责声明:网站文章均由用户上传,仅供读者学习交流使用,禁止用做商业用途。若文章涉及色情,反动,侵权等违法信息,请向我们举报,一经核实我们会立即删除!