程序员最近都爱上了这个网站  程序员们快来瞅瞅吧!  it98k网:it98k.com

本站消息

站长简介/公众号

  出租广告位,需要合作请联系站长


+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

暂无数据

设置无法删除重复项

发布于2023-06-07 19:58     阅读(1161)     评论(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黑洞网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

25 0
收藏该文
已收藏

评论内容:(最多支持255个字符)