/** * Maps the specified <code>key</code> to the specified <code>value</code> in this hashtable. * Neither the key nor the value can be <code>null</code>. * * <p>The value can be retrieved by calling the <code>get</code> method with a key that is equal * to the original key. * * @param key the hashtable key. * @param value the value. * @return the previous value of the specified key in this hashtable, or <code>null</code> if it * did not have one. * @exception NullPointerException if the key or value is <code>null</code>. * @see java.lang.Object#equals(java.lang.Object) * @see java.util.Hashtable#get(java.lang.Object) * @since JDK1.0 */ public Object put(Object key, Object value) { // Make sure the value is not null if (value == null) { throw new NullPointerException(); } // Makes sure the key is not already in the hashtable. HashtableEntry tab[] = table; int hash = key.hashCode(); int index = (hash & 0x7FFFFFFF) % tab.length; for (HashtableEntry e = tab[index]; e != null; e = e.next) { if ((e.hash == hash) && e.key.equals(key)) { Object old = e.value; e.value = value; return old; } } if (count >= threshold) { // Rehash the table if the threshold is exceeded rehash(); return put(key, value); } // Creates the new entry. HashtableEntry e = new HashtableEntry(); e.hash = hash; e.key = key; e.value = value; e.next = tab[index]; tab[index] = e; count++; return null; }
protected Object clone() { HashtableEntry entry = new HashtableEntry(); entry.hash = hash; entry.key = key; entry.value = value; entry.next = (next != null) ? (HashtableEntry) next.clone() : null; return entry; }
/** * Puts the key and the value in the table. If there already is a key equal ignore case to the one * passed the new value exchhanes the old one. * * @param key String key * @param value object to put * @return old value if any, or null if none * @exception IllegalArgumentException if key is not a string */ public synchronized Object put(Object key, Object value) throws IllegalArgumentException { if (value == null) { throw new NullPointerException(); } if (table == null) initTable(MIN_CAPACITY); try { // Makes sure the key is not already in the hashtable. int hash = hashCode((String) key); int index; HashtableEntry[] tab = null; do { tab = table; index = (hash & 0x7FFFFFFF) % tab.length; for (HashtableEntry e = tab[index]; e != null; e = e.next) { if ((e.hash == hash) && e.key.equalsIgnoreCase((String) key)) { Object old = e.value; e.value = value; return old; } } if (count >= threshold) { // Rehash the table if the threshold is exceeded rehash(); continue; } break; } while (true); // Creates the new entry. HashtableEntry e = new HashtableEntry(); e.hash = hash; e.key = (String) key; e.value = value; e.next = tab[index]; tab[index] = e; count++; return null; } catch (ClassCastException cce) { throw new IllegalArgumentException("Non string keys are not accepted!"); } }