在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”); 系统输出打印项次; } }
我正在创建两个相同的对象,但它们被输入到集合中,为什么s1.equals(s2)返回false?它与插入集合无关。您需要重写equals,例如下面是基本的equal方法:在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{
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);
}