代码之家  ›  专栏  ›  技术社区  ›  Mukesh Gupta

在Java中插入SET类[复制]

  •  -3
  • Mukesh Gupta  · 技术社区  · 7 年前
    import java.util.*;
    class emp{
        String city;
        String name;
        emp(String a, String b)
        {
            city=a;
            name=b;
        }
    }
    public class HelloWorld{
    
         public static void main(String []args){
             Set<emp> s = new HashSet<emp>();
             emp s1=new emp("bangalore","mukesh");
             emp s2= new emp("bangalore","mukesh");
             s.add(s1);
             s.add(s2);
             System.out.println(s1.equals(s2));
             System.out.println("finsih");
             System.out.println(s);
    
         }
    }
    

    我正在创建两个对象,这两个对象是相同的,但它们是在集合中输入的,为什么s1.equals(s2)返回false?

    2 回复  |  直到 7 年前
        1
  •  -1
  •   Rudy    7 年前

    与插入设置无关。您需要重写equals,例如下面是基本的equal方法:

    @Override
    public boolean equals(Object o) {
    
        if (o == this) return true;
        if (!(o instanceof Emp)) {
            return false;
        }
        Emp emp = (Emp) o;
        return  Objects.equals(city, emp.city) &&
                Objects.equals(name, emp.name);
    }
    

    请按照下面的细节,按照下面的示例操作: https://www.mkyong.com/java/java-how-to-overrides-equals-and-hashcode/

        2
  •  -1
  •   Prashant    7 年前

    因为你还没有推翻 equals() , Object#equals 默认使用的 == 操作员。因为你已经创建了两个对象 new 接线员,他们的参考不同,因此调用 小精灵 返回false。你可以覆盖两者 equals hashcode 提供平等:

    class emp{
        String city;
        String name;
        emp(String a, String b) {
            city=a;
            name=b;
        }
    
        @Override
        public boolean equals(Object o) {
            if (this == o) return true;
            if (!(o instanceof emp)) return false;
            emp test = (emp) o; 
            return Objects.equals(city, emp.city) &&
                    Objects.equals(name, emp.name);
        }
    
        @Override
        public int hashCode() {
            return Objects.hash(city, name);
    
    }
    

    现在尝试存储对象将只存储集中的一个对象。