I expect to have only 2 elements in my Set
but I receive 3 elements while printing! How can I define uniqueness?
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);
}
}
There are two issues here
equals
should be lowercase and accept an Object
hashCode
as wellThe modified code could look like below. Note that the implementation is far from being perfect as in equals
you should check for null and whether a type cast is possible etc. Also hashCode
is just an example but how to implement such things is another topic.
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);
}
}
Result:
[11 24, 10 25, 44 25]
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With