final void buildBloomFilterForBucket(int bucketInSegmentPos, MemorySegment bucket, HashPartition<BT, PT> p) {
		final int count = bucket.getShort(bucketInSegmentPos + HEADER_COUNT_OFFSET);
		if (count <= 0) {
			return;
		}

		int[] hashCodes = new int[count];
		// As the hashcode and bloom filter occupy same bytes, so we read all hashcode out at first and then write back to bloom filter.
		for (int i = 0; i < count; i++) {
			hashCodes[i] = bucket.getInt(bucketInSegmentPos + BUCKET_HEADER_LENGTH + i * HASH_CODE_LEN);
		}
		this.bloomFilter.setBitsLocation(bucket, bucketInSegmentPos + BUCKET_HEADER_LENGTH);
		for (int hashCode : hashCodes) {
			this.bloomFilter.addHash(hashCode);
		}
		buildBloomFilterForExtraOverflowSegments(bucketInSegmentPos, bucket, p);
	}
final void buildBloomFilterForBucket ( int bucketInSegmentPos , MemorySegment bucket , HashPartition < BT , PT > p ) { final int count = bucket . getShort ( bucketInSegmentPos + HEADER_COUNT_OFFSET ) ; if ( count <= 0 ) { return ; } int [ ] hashCodes = new int [ count ] ; for ( int i = 0 ; i < count ; i ++ ) { hashCodes [ i ] = bucket . getInt ( bucketInSegmentPos + BUCKET_HEADER_LENGTH + i * HASH_CODE_LEN ) ; } this . bloomFilter . setBitsLocation ( bucket , bucketInSegmentPos + BUCKET_HEADER_LENGTH ) ; for ( int hashCode : hashCodes ) { this . bloomFilter . addHash ( hashCode ) ; } buildBloomFilterForExtraOverflowSegments ( bucketInSegmentPos , bucket , p ) ; }
Set all the bucket memory except bucket header as the bit set of bloom filter, and use hash code of build records
to build bloom filter.