src/main/java/com/workplacesystems/utilsj/collections/TransactionalHashMap.java
Entry<K,V> removeEntryForKey(Object key) throws ConcurrentModificationException
    {
        Object k = maskNull(key);
        int hash = hash(k);
        int i = indexFor(hash, table.length);
        Entry<K,V> prev = table[i];
        Entry<K,V> e = prev;
        
        while (e != null)
        {
            Entry<K,V> next = e.next;
            if (e.hash == hash && validEntry(e) && eq(k, e.key))
            {
                if (e.is(Entry.DELETED, null) && !e.is(Entry.DELETED, getCurrentThreadId()))
                    throw new ConcurrentModificationException();
                
                if (auto_commit)
                {
                    modCount++;
                    size--;
                    if (prev == e)
                        table[i] = next;
                    else
                        prev.next = next;
                    return e;
                }
                else
                    e.setStatus(Entry.DELETED, getCurrentThreadId());
            }
            prev = e;
            e = next;
        }
        
        return e;
    }
Entry<K,V> removeEntryForKey(Object key) throws ConcurrentModificationException
    {
        Object k = maskNull(key);
        int hash = hash(k);
        int i = indexFor(hash, table.length);
        Entry<K,V> prev = table[i];
        Entry<K,V> e = prev;
        
        while (e != null)
        {
            Entry<K,V> next = e.next;
            if (e.hash == hash && validEntry(e) && eq(k, e.key))
            {
                if (e.is(Entry.DELETED, null) && !e.is(Entry.DELETED, getCurrentThreadId()))
                    throw new ConcurrentModificationException();
                
                if (auto_commit)
                {
                    modCount++;
                    size--;
                    if (prev == e)
                        table[i] = next;
                    else
                        prev.next = next;
                    return e;
                }
                else
                    e.setStatus(Entry.DELETED, getCurrentThreadId());
            }
            prev = e;
            e = next;
        }
        
        return e;
    }
Removes and returns the entry associated with the specified key
in the HashMap.  Returns null if the HashMap contains no mapping
for this key.