public static <V> Object[] update(Object[] btree,
Comparator<V> comparator,
Iterable<V> updateWith,
int updateWithLength,
boolean updateWithIsSorted,
UpdateFunction<V> updateF)
{
if (btree.length == 0)
return build(updateWith, updateWithLength, comparator, updateWithIsSorted, updateF);
if (!updateWithIsSorted)
updateWith = sorted(updateWith, comparator, updateWithLength);
Queue<Builder> queue = modifier.get();
Builder builder = queue.poll();
if (builder == null)
builder = new Builder();
btree = builder.update(btree, comparator, updateWith, updateF);
queue.add(builder);
return btree;
}