protected void split() { int halfGuides = guides.size() / 2; int halfKids = halfGuides + 1; GuideNode<K, V> left = new GuideNode<K, V>(comparator, guides.subList(0, halfGuides), kids.subList(0, halfKids)); GuideNode<K, V> right = new GuideNode<K, V>( comparator, guides.subList(halfGuides + 1, guides.size()), kids.subList(halfKids, kids.size())); left.setLeft(getLeft()); left.setRight(right); getLeft().setRight(left); left.setParent(getParent()); for (Node<K, V> kid : left.kids) { kid.setParent(left); } right.setLeft(left); right.setRight(getRight()); getRight().setLeft(right); right.setParent(getParent()); for (Node<K, V> kid : right.kids) { kid.setParent(right); } parent.insertKid(this, guides.get(halfGuides), left, right); }