||I have to disagree about TreeSet vs PriorityQueue. First of all, I don't know the exact problem but your comparator seems wrong, the line with "return 0" is unreachable, because you have ">=" instead of ">" in the line above.
I just realized after several tests that TreeSet have several advantages over PriorityQueue, the only thing you need to care about is a proper comparator. TreeSet's remove() method has better performance than PriorityQueue's remove(). Also, with TreeSet you have less elements since PriorityQueue allows duplicates you generally don't need, at least for short paths.