在java中插入set类

时间:2018-06-18 03:57:11

标签: java collections

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);

     }
}

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

2 个答案:

答案 0 :(得分:-1)

它与插入设置无关。你需要覆盖equals,例如下面是基本相等的方法:

@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/

答案 1 :(得分:-1)

由于您未覆盖equals(),因此使用Object#equals,默认情况下使用==运算符。由于您使用new运算符创建了2个对象,因此它们的引用不同,因此对equals()的调用返回false。您可以覆盖equalshashcode以提供相等性:

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);

}

现在尝试存储对象只会在集合中存储一个对象。