我期望只有2个元素,Set
但我在打印时会收到3个元素!我怎样才能定义唯一性?
public class test {
public static void main(String[] args) {
class bin {
int a;
int b;
bin (int a, int b){
this.a=a;
this.b=b;
}
public boolean Equals(bin me) {
if(this.a==me.a && this.b==me.b)
return true;
else
return false;
}
@Override
public String toString() {
return a+" "+b;
}
}
Set<bin> q= new HashSet<bin>();
q.add(new bin(11,23));
q.add(new bin(11,23));
q.add(new bin(44,25));
System.out.println(q);
}
}
Run Code Online (Sandbox Code Playgroud)
这里有两个问题
equals
应小写并接受 Object
hashCode
以及修改后的代码如下所示.请注意,实现远非完美,因为equals
您应检查null以及是否可以进行类型转换等.此外hashCode
只是一个示例,但如何实现此类事情是另一个主题.
import java.util.Set;
import java.util.HashSet;
public class test {
public static void main(String[] args) {
class bin{
int a;
int b;
bin (int a, int b){
this.a=a;
this.b=b;
}
@Override
public boolean equals(Object me) {
bin binMe = (bin)me;
if(this.a==binMe.a && this.b==binMe.b)
return true;
else
return false;
}
@Override
public int hashCode() {
return this.a + this.b;
}
@Override
public String toString() {
return a+" "+b;
}
}
Set<bin> q= new HashSet<bin>();
q.add(new bin(11,24));
q.add(new bin(11,24));
q.add(new bin(10,25));
q.add(new bin(44,25));
System.out.println(q);
}
}
Run Code Online (Sandbox Code Playgroud)
结果:
[11 24,10 25,44 25]
归档时间: |
|
查看次数: |
3157 次 |
最近记录: |