src/main/java/com/workplacesystems/utilsj/collections/TransactionalBidiTreeMap.java
private Object doGet(final Object o, final int index) {

        checkNonNullComparable(o, index);

        Node<K,V> node = lookupValid(o, index, getCurrentThreadId());

        return (node==null)
                ? null
                : node.getData(oppositeIndex(index));
    }
private Object doGet(final Object o, final int index) {

        checkNonNullComparable(o, index);

        Node<K,V> node = lookupValid(o, index, getCurrentThreadId());

        return (node==null)
                ? null
                : node.getData(oppositeIndex(index));
    }
common get logic, used to get by key or get by value

@param o the key or value that we're looking for
@param index KEY or VALUE

@return the key (if the value was mapped) or the value (if the
key was mapped); null if we couldn't find the specified
object