docs: @SuppressWarnings("unchecked")
      public E lookup(final int key)
      {
          @DoNotSub int size = this.size;
          final int[] keys = this.keys;
          final Object[] values = this.values;
  
          for (@DoNotSub int i = 0; i < size; i++)
          {
              if (keys[i] == key)
              {
                  final E value = (E)values[i];
  
                  makeMostRecent(key, value, i);
  
                  return value;
              }
          }
  
          final E value = factory.apply(key);
  
          if (value != null)
          {
              if (size == capacity)
              {
                  closer.accept((E)values[size - 1]);
              }
              else
              {
                  size++;
                  this.size = size;
              }
  
              makeMostRecent(key, value, size - 1);
          }
  
          return value;
      }