code: @Override
  	public void insert(T record) throws IOException {
  		if (closed) {
  			return;
  		}
  
  		final int hashCode = MathUtils.jenkinsHash(buildSideComparator.hash(record));
  		final int bucket = hashCode & numBucketsMask;
  		final int bucketSegmentIndex = bucket >>> numBucketsPerSegmentBits; // which segment contains the bucket
  		final MemorySegment bucketSegment = bucketSegments[bucketSegmentIndex];
  		final int bucketOffset = (bucket & numBucketsPerSegmentMask) << bucketSizeBits; // offset of the bucket in the segment
  		final long firstPointer = bucketSegment.getLong(bucketOffset);
  
  		try {
  			final long newFirstPointer = recordArea.appendPointerAndRecord(firstPointer, record);
  			bucketSegment.putLong(bucketOffset, newFirstPointer);
  		} catch (EOFException ex) {
  			compactOrThrow();
  			insert(record);
  			return;
  		}
  
  		numElements++;
  		resizeTableIfNecessary();
  	}
docs: Inserts the given record into the hash table.
  Note: this method doesn't care about whether a record with the same key is already present.
  @param record The record to insert.
  @throws IOException (EOFException specifically, if memory ran out)