code: public synchronized Object insert(String key, Object value) {
          // evict until size < maxSize
          while (isEvictionRequired() && entryLimit > 0 && entryLimit < Integer.MAX_VALUE) {
              evictStaleEntries();
          }
  
          CacheEntry curEntry = new CacheEntry(value);
          CacheEntry oldEntry1 = (CacheEntry) primaryTable.put(key, curEntry);
  
          CacheEntry oldEntry2 = (CacheEntry) secondaryTable.remove(key);
          CacheEntry oldEntry3 = (CacheEntry) tertiaryTable.remove(key);
  
          return (oldEntry1 != null) ? oldEntry1.value : (oldEntry2 != null) ? oldEntry2.value : (oldEntry3 != null) ? oldEntry3.value : null;
      }
docs: Insert the value into the Cache using the specified key.
  
  @param key the key of the entry to be inserted
  @param value the value of the entry to be inserted
  @return the previous value associated with key, or null if there was none