code: @Override
    public <T extends KTypeVTypeProcedure<? super KType, ? super VType>> T forEach(T procedure) {
      final KType[] keys = Intrinsics.<KType[]> cast(this.keys);
      final VType[] values = Intrinsics.<VType[]> cast(this.values);
  
      if (hasEmptyKey) {
        procedure.apply(Intrinsics.<KType> empty(), Intrinsics.<VType> cast(values[mask + 1]));
      }
  
      for (int slot = 0, max = this.mask; slot <= max; slot++) {
        if (!Intrinsics.<KType> isEmpty(keys[slot])) {
          procedure.apply(keys[slot], values[slot]);
        }
      }
  
      return procedure;
    }
docs: {@inheritDoc}