in src/main/java/org/apache/commons/collections4/bidimap/TreeBidiMap.java [1145:1198]
private void doPut(final K key, final V value) {
checkKeyAndValue(key, value);
// store previous and remove previous mappings
doRemoveKey(key);
doRemoveValue(value);
Node<K, V> node = rootNode[KEY.ordinal()];
if (node == null) {
// map is empty
final Node<K, V> root = new Node<>(key, value);
rootNode[KEY.ordinal()] = root;
rootNode[VALUE.ordinal()] = root;
grow();
} else {
// add new mapping
while (true) {
final int cmp = compare(key, node.getKey());
if (cmp == 0) {
// shouldn't happen
throw new IllegalArgumentException("Cannot store a duplicate key (\"" + key + "\") in this Map");
}
if (cmp < 0) {
if (node.getLeft(KEY) == null) {
final Node<K, V> newNode = new Node<>(key, value);
insertValue(newNode);
node.setLeft(newNode, KEY);
newNode.setParent(node, KEY);
doRedBlackInsert(newNode, KEY);
grow();
break;
}
node = node.getLeft(KEY);
} else { // cmp > 0
if (node.getRight(KEY) == null) {
final Node<K, V> newNode = new Node<>(key, value);
insertValue(newNode);
node.setRight(newNode, KEY);
newNode.setParent(node, KEY);
doRedBlackInsert(newNode, KEY);
grow();
break;
}
node = node.getRight(KEY);
}
}
}
}