java - HashMap - not returning correct value for equal keys -
this question has answer here:
i'm playing around hashmaps in java , i've stumbled upon can't make sense of. can't seem find duplicate of issue on here either.
i'm trying create map has vertexpair key , integer value. vertexpair container 2 vertex objects. when create 2 vertexpairs have same hash code , equal (verified .equals()), not return same value map.
here code:
hashmap<vertexpair, integer> edges = new hashmap<vertexpair, integer>(); vertex = new vertex("a"); vertex b = new vertex("b"); vertexpair p = new vertexpair(a, b); vertexpair m = new vertexpair(a, b); vertexpair n = new vertexpair(b, a); vertexpair check = new vertexpair(a, new vertex("c")); system.out.println(p.equals(m)); system.out.println(p.equals(n)); system.out.println(m.equals(n)); //just sure equals working system.out.println(p.equals(check)); system.out.println(m.hashcode()); system.out.println(n.hashcode()); system.out.println(p.hashcode()); //just sure hashcode working system.out.println(check.hashcode()); edges.put(p, 10); system.out.println(edges.get(p)); system.out.println(edges.get(m)); system.out.println(edges.get(n)); and it's output:
true true true false 1757285723 1757285723 1757285723 -425440240 10 null null here vertexpair class requested:
public final class vertexpair { private hashset<vertex> set; public vertexpair(vertex a, vertex b) { if(a==null || b==null) throw new nullpointerexception("vertexes must not null"); set = new hashset<vertex>(); set.add(a); set.add(b); } public hashset<vertex> getvertexes() { return set; } @override public int hashcode() { return set.hashcode(); } public boolean equals(vertexpair p) { if(!(p instanceof vertexpair)) return false; if(p==this) return true; return set.equals(p.getvertexes()); } } can please explain me what's going on? must misunderstanding crucial hashmaps. in advance :)
replace
public boolean equals(vertexpair p) { with
@override public boolean equals(object p) {
Comments
Post a Comment