code: private static <T> T[] grow(T[] array, int required) {
          int oldCapacity = array.length;
          // x1.5: 20, 30, 45, 67, 100, 150, 225, 337, 505, etc
          int newCapacity = oldCapacity == 0 ? DEFAULT_CAPACITY
                                             : oldCapacity + (oldCapacity >> 1);
          if (newCapacity < required)
              newCapacity = required;
          return Arrays.copyOf(array, newCapacity);
      }
docs: Generic grow function, expand an array by a varried amount to have
  enough (required) space.
  
  @param array    the array to expand
  @param required the minimum required space
  @param <T>      array type
  @return the expanded array