docs: public final V putOrAggregate(K key, V value, ReduceFunction<V> aggregator) throws Exception {
  		final int hash = hash(key);
  		final int slot = indexOf(hash);
  
  		// search the chain from the slot
  		for (Entry<K, V> entry = table[slot]; entry != null; entry = entry.next) {
  			if (entry.hashCode == hash && entry.key.equals(key)) {
  				// found match
  				entry.value = aggregator.reduce(entry.value, value);
  				return entry.value;
  			}
  		}
  
  		// no match, insert a new value
  		insertNewEntry(hash, key, value, slot);
  		// return the original value
  		return value;
  	}