docs: @SuppressWarnings("unchecked")
      public V put(final int key, final V value)
      {
          requireNonNull(value, "null values are not supported");
  
          V evictedValue = null;
          @DoNotSub final int setNumber = Hashing.hash(key, mask);
          @DoNotSub final int setBeginIndex = setNumber << setSizeShift;
          @DoNotSub int i = setBeginIndex;
  
          for (@DoNotSub int nextSetIndex = setBeginIndex + setSize; i < nextSetIndex; i++)
          {
              if (null == values[i])
              {
                  break;
              }
  
              if (key == keys[i])
              {
                  evictedValue = (V)values[i];
                  shuffleUp(i, nextSetIndex - 1);
  
                  break;
              }
          }
  
          if (null == evictedValue)
          {
              evictedValue = (V)values[setBeginIndex + (setSize - 1)];
          }
  
          shuffleDown(setBeginIndex);
  
          keys[setBeginIndex] = key;
          values[setBeginIndex] = value;
  
          cachePuts++;
  
          if (null != evictedValue)
          {
              evictionConsumer.accept(evictedValue);
          }
          else
          {
              ++size;
          }
  
          return null;
      }