map - Java TreeMap contains a key but a containsKey call returns false (even the key is exactly the same unchanged object) -
why possible loop keyset of treemap , getting .containskey == false?
for (object thisobject : map.keyset()) { if (!map.containskey(thisobject)) { system.out.println("this line should never reached."); } } after lot, lot of different iterations , calls line gets hit. map.get(thisobject) return null. debug shows key (same reference, value , hash) , actual value in map. map small (25 elements) treemap<long, double>
update:
as guessed @rgettman theres custom sort comparator used @ construction of treemap (didn't see because constructed class). comparator (i guess) copy pasted here
changing comparator:
public int compare(object a, object b) { if((double)base.get(a) > (double)base.get(b)) { return 1; } else if((double)base.get(a) == (double)base.get(b)) { return 0; } else { return -1; } } to
... } else if(base.get(a).equals(base.get(b))) { return 0; ... fixes problem. reason why problem showing after millions of operation there no cases map had 2 similar values 2 different keys, unlikely in context.
so at:
25151l, 1.7583805400614032 24827l, 1.7583805400614032 it fails.
thanks help!
you must have made changes backing entryset()/map.entry thereby changing key orders, thereby having failed search containskey.
Comments
Post a Comment