【发布时间】:2019-01-11 20:48:47
【问题描述】:
假设我有两个不同的哈希集,如下所示如何检查两个哈希集是否包含相同的元素并且这两个哈希集相等,与集合中元素的顺序无关,请指教..!!
Set set1=new HashSet();
set.add(new Emp("Ram","Trainer",34000));
set.add(new Emp("LalRam","Trainer",34000));
另一个是..
Set set2=new HashSet();
set.add(new Emp("LalRam","Trainer",34000));
set.add(new Emp("Ram","Trainer",34000));
员工 pojo 是...
class Emp //implements Comparable
{
String name,job;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getJob() {
return job;
}
public void setJob(String job) {
this.job = job;
}
public int getSalary() {
return salary;
}
public void setSalary(int salary) {
this.salary = salary;
}
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;
}*/
}
【问题讨论】:
-
首先定义“等于”。等于参考还是等价?如果是后者,是否为 Emp 类定义了 equals 和 hashcode?span>
-
假设
Emp对equals()和hashCode()有适当的覆盖(它可能会这样做,因为它存在于哈希表中)你可以比较集合上的计数,然后尝试添加一个集合的每个元素到另一个集合。如果add()方法曾经返回true,那么就会有所不同。 -
这与比较任何其他集合没有什么不同。请参阅:stackoverflow.com/questions/50098/…。虽然这是 .net,但 java 实现应该几乎相同。我推荐 Daniel Jennings 或 mbillings 的回答,因为我很确定投票最高的回答违反了 Microsoft 的使用条款。
-
首先,在
Set中讨论元素顺序是没有意义的。集合没有隐含的顺序。其次,您没有指定“等于”的含义。对于集合,它可以是“两个集合包含对实际元素的相同引用集”,或“集合 A 中的所有元素比较相等(通过equals())与其对应的元素在集合 B" 中。您似乎想要后一种定义,实现起来比较棘手。 -
这个问题是重复的,正确答案在这里:stackoverflow.com/questions/1565214/…
标签: java collections hashset