java - HashMap - not returning correct value for equal keys -


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

Popular posts from this blog

routing - AngularJS State management ->load multiple states in one page -

python - GRASS parser() error -

Swift game error message -