void (int key, T x) { int deletedKey = 0; Object deletedValue = null; int index = myFirstFree; if (myCount < myCache.length - 1) { if (index == 0) { index = myCount; ++index; } else { myFirstFree = myCache[index].hash_next; } if (myCount == 0) { myBack = index; } } else { index = myBack; removeEntryFromHashTable(index); final CacheEntry cacheEntry = myCache[index]; deletedKey = cacheEntry.key; deletedValue = cacheEntry.value; myCache[myBack = myCache[index].prev].next = 0; } myCache[index].key = key; myCache[index].value = x; addEntry2HashTable(index); add2Top(index); if (deletedValue != null) { fireListenersAboutDeletion(deletedKey, (T)deletedValue); } }