I'd like to propose a re-factoring of this class:

1. Don't bother factoring this out into its own class (just makes things more confusing). Instead move this logic sampling into SizeTrackingAppendOnlyMap.

2. Keep track of every sample ever taken (why not? Even with 1.1 growth rate it is only 200 samples for 1 billion records)

3. Pre-compute `interpolatedDelta` when you take a new sample. Also change the name of that variable to `bytesPerKey` or something more explicit. Right now you re-calculate every time an item is added to the hash map, this is expensive. In general, you'll want `estimateSize` to be as simple as possible since it's a hot code path. 

4. Change `flushSamples` to `reset` or something. The term flush usually means to transfer data to a downstream consumer.