code: @Override
      @ConstantTime
      public Handle<K, V> insert(K key, V value) {
          if (key == null) {
              throw new IllegalArgumentException("Null keys not permitted");
          }
          if (compare(key, maxKey) > 0) {
              throw new IllegalArgumentException("Key is more than the maximum allowed key");
          }
          if (compare(key, lastDeletedKey) < 0) {
              throw new IllegalArgumentException("Invalid key. Monotone heap.");
          }
  
          // add to bucket
          Node p = new Node(key, value);
          int b = computeBucket(key, lastDeletedKey);
          p.bucket = b;
          if (buckets[b] == null) {
              buckets[b] = p;
          } else {
              buckets[b].prev = p;
              p.next = buckets[b];
              buckets[b] = p;
          }
  
          // update current minimum cache
          if (currentMin == null || compare(key, currentMin.key) < 0) {
              currentMin = p;
          }
  
          size++;
          return p;
      }
docs: {@inheritDoc}
  
  @throws IllegalArgumentException
  if the key is null
  @throws IllegalArgumentException
  if the key is less than the minimum allowed key
  @throws IllegalArgumentException
  if the key is more than the maximum allowed key
  @throws IllegalArgumentException
  if the key is less than the last deleted key (or the minimum
  key allowed if no key has been deleted)