code: private int searchBucket(int bucketIndex)
      {
          int low = 0;
          int high = numberOfEntries - 1;
  
          while (low <= high) {
              int middle = (low + high) >>> 1;
  
              int middleBucketIndex = decodeBucketIndex(entries[middle]);
  
              if (bucketIndex > middleBucketIndex) {
                  low = middle + 1;
              }
              else if (bucketIndex < middleBucketIndex) {
                  high = middle - 1;
              }
              else {
                  return middle;
              }
          }
  
          return -(low + 1); // not found... return insertion point
      }
docs: Returns a index of the entry if found. Otherwise, it returns -(insertionPoint + 1)