public synchronized V put(K key, V value) {if (value == null) {throw new NullPointerException();}int hash = secondaryHash(key.hashCode());HashtableEntry<K, V>[] tab = table;int index = hash & (tab.length - 1);HashtableEntry<K, V> first = tab[index];for (HashtableEntry<K, V> e = first; e != null; e = e.next) {if (e.hash == hash && key.equals(e.key)) {V oldValue = e.value;e.value = value;return oldValue;}}modCount++;if (size++ > threshold) {rehash();  tab = doubleCapacity();index = hash & (tab.length - 1);first = tab[index];}tab[index] = new HashtableEntry<K, V>(key, value, hash, first);return null;}
public override V put(K key, V value){lock (this){if ((object)value == null){throw new System.ArgumentNullException();}int hash = secondaryHash(key.GetHashCode());java.util.Hashtable.HashtableEntry<K, V>[] tab = table;int index = hash & (tab.Length - 1);java.util.Hashtable.HashtableEntry<K, V> first = tab[index];{for (java.util.Hashtable.HashtableEntry<K, V> e = first; e != null; e = e.next){if (e.hash == hash && key.Equals(e.key)){V oldValue = e.value;e.value = value;return oldValue;}}}modCount++;if (_size++ > threshold){rehash();tab = doubleCapacity();index = hash & (tab.Length - 1);first = tab[index];}tab[index] = new java.util.Hashtable.HashtableEntry<K, V>(key, value, hash, first);return default(V);}}