在java中插入set类 import java.util.*; 类电磁脉冲{ 字符串城市; 字符串名; emp(字符串a、字符串b) { 城市=a; name=b; } } 公共类HelloWorld{ 公共静态void main(字符串[]args){ Set s=新的HashSet(); emp s1=新emp(“班加罗尔”、“穆克什”); emp s2=新emp(“班加罗尔”、“穆克什”); s、 添加(s1); s、 添加(s2); 系统输出println(s1等于(s2)); System.out.println(“finsih”); 系统输出打印项次; } }

在java中插入set类 import java.util.*; 类电磁脉冲{ 字符串城市; 字符串名; emp(字符串a、字符串b) { 城市=a; name=b; } } 公共类HelloWorld{ 公共静态void main(字符串[]args){ Set s=新的HashSet(); emp s1=新emp(“班加罗尔”、“穆克什”); emp s2=新emp(“班加罗尔”、“穆克什”); s、 添加(s1); s、 添加(s2); 系统输出println(s1等于(s2)); System.out.println(“finsih”); 系统输出打印项次; } },java,collections,Java,Collections,我正在创建两个相同的对象,但它们被输入到集合中,为什么s1.equals(s2)返回false?它与插入集合无关。您需要重写equals,例如下面是基本的equal方法: import java.util.*; class emp{ String city; String name; emp(String a, String b) { city=a; name=b; } } public class HelloWorld{

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

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

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

     }
}
遵循细节,遵循此处的示例:

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

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

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

如果需要这两个对象相等,则需要通过重写对象类的等值函数来编写自己的等值函数。如果您的意图是,集合只有一个代码> EMPObject(因为您认为它们是相等的),然后您需要同时实现
equals()
hashCode()
。参见.FYI:Java命名约定是指类名以大写字母开头,即
Emp
。此外,命名参数
a
b
对调用该方法的人没有多大帮助。
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);

}