Improving time complexity of cheapest travel route algorithm
I find it a little bit confusing that the title of your question doesn't seem to match its content. That is, you mention you're looking for the cheapest route, and your code sort of references fares, but your algorithm is a BFS that pays no attention whatsoever to the costs.

That said, the question you actually asked has a fairly simple answer. Change this bit of code:

if (!stationsExplored.contains(adjacentStation.getKey()) &amp;&amp; !stationsUnexplored.contains(adjacentStation.getKey())) {
    stationsUnexplored.add(adjacentStation.getKey());
}


To this:

if ( !stationsExplored.contains(adjacentStation.getKey()) ) {
    stationsUnexplored.add(adjacentStation.getKey());
    stationsExplored.add(adjacentStation.getKey());
}


You'll also have to add a stationsExplored.add(1) around the top and you should remove the stationsExplored.add(currentStation) from the bottom. (That was wrong anyway I think. It ought to have been currentStation.getKey())

All you want is to add everything to the Queue exactly once, and this accomplishes that just as well as what you had before. It doesn't matter to your code if you mark the station as explored as soon as you add it to your Queue or if you wait until you pop it off, and by adding it early, you allow yourself to use only the faster Set contains method.