Buggy code:
public class DualTreeBidiMap < K , V > extends AbstractDualBidiMap < K , V > implements Serializable , SortedBidiMap < K , V > { private static final long serialVersionUID = 721969328361809L ; protected final Comparator < ? super K > comparator ; protected final Comparator < ? super V > valueComparator ; public DualTreeBidiMap ( ) { } public DualTreeBidiMap ( Map < K , V > map ) { } public DualTreeBidiMap ( Comparator < ? super K > keyComparator , Comparator < ? super V > valueComparator ) { } protected DualTreeBidiMap ( Map < K , V > normalMap , Map < V , K > reverseMap , BidiMap < V , K > inverseBidiMap ) { } @ Override protected DualTreeBidiMap < V , K > createBidiMap ( Map < V , K > normalMap , Map < K , V > reverseMap , BidiMap < K , V > inverseMap ) { } public Comparator < ? super K > comparator ( ) { } public Comparator < ? super V > valueComparator ( ) { } public K firstKey ( ) { } public K lastKey ( ) { } public K nextKey ( K key ) { } public K previousKey ( K key ) { } @ Override public OrderedMapIterator < K , V > mapIterator ( ) { } public SortedBidiMap < V , K > inverseSortedBidiMap ( ) { } public OrderedBidiMap < V , K > inverseOrderedBidiMap ( ) { } public SortedMap < K , V > headMap ( K toKey ) { } public SortedMap < K , V > tailMap ( K fromKey ) { } public SortedMap < K , V > subMap ( K fromKey , K toKey ) { } @ Override public SortedBidiMap < V , K > inverseBidiMap ( ) { } protected static class ViewMap < K , V > extends AbstractSortedMapDecorator < K , V > { final DualTreeBidiMap < K , V > bidi ; protected ViewMap ( DualTreeBidiMap < K , V > bidi , SortedMap < K , V > sm ) { } @ Override public boolean containsValue ( Object value ) { } @ Override public void clear ( ) { } @ Override public SortedMap < K , V > headMap ( K toKey ) { } @ Override public SortedMap < K , V > tailMap ( K fromKey ) { } @ Override public SortedMap < K , V > subMap ( K fromKey , K toKey ) { } @ Override protected DualTreeBidiMap < K , V > decorated ( ) { } @ Override public K previousKey ( K key ) { } @ Override public K nextKey ( K key ) { } } protected static class BidiOrderedMapIterator < K , V > implements OrderedMapIterator < K , V > , ResettableIterator < K > { protected final AbstractDualBidiMap < K , V > parent ; protected ListIterator < Map . Entry < K , V > > iterator ; private Map . Entry < K , V > last = null ; protected BidiOrderedMapIterator ( AbstractDualBidiMap < K , V > parent ) { } public boolean hasNext ( ) { } public K next ( ) { } public boolean hasPrevious ( ) { } public K previous ( ) { } public void remove ( ) { } public K getKey ( ) { } public V getValue ( ) { } public V setValue ( V value ) { } public void reset ( ) { } @ Override public String toString ( ) { } } private void writeObject ( ObjectOutputStream out ) throws IOException { } @ SuppressWarnings ( "unchecked" ) private void readObject ( ObjectInputStream in ) throws IOException , ClassNotFoundException { in . defaultReadObject ( ) ; normalMap = new TreeMap ( comparator ) ; <START_BUG> reverseMap = new TreeMap ( comparator ) ; <END_BUG> Map map = ( ( Map ) ( in . readObject ( ) ) ) ; DualTreeBidiMap . putAll ( map ) ; } }

Fix:
reverseMap = new TreeMap ( valueComparator ) ;