code: public final V putIfAbsent(K key, LazyFactory<V> factory) {
  		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
  				return entry.value;
  			}
  		}
  
  		// no match, insert a new value
  		V value = factory.create();
  		insertNewEntry(hash, key, value, slot);
  
  		// return the created value
  		return value;
  	}
docs: Inserts a value for the given key, if no value is yet contained for that key. Otherwise,
  returns the value currently contained for the key.
  
  <p>The value that is inserted in case that the key is not contained, yet, is lazily created
  using the given factory.
  
  @param key The key to insert.
  @param factory The factory that produces the value, if no value is contained, yet, for the key.
  @return The value in the map after this operation (either the previously contained value, or the
  newly created value).
  
  @throws java.lang.NullPointerException Thrown, if the key is null.