org.aitools.programd.util
Class LRUCache<K,V>

java.lang.Object
  extended by org.aitools.programd.util.LRUCache<K,V>
Type Parameters:
K - the key
V - the value

public class LRUCache<K,V>
extends Object

Fixed length cache with a LRU replacement policy. If cache items implement CacheListener, they will be informed when they're removed from the cache.

Null keys are not allowed. LRUCache is synchronized.


Nested Class Summary
static interface LRUCache.Entry<K_,V_>
          Interface for entry iterator;
 
Field Summary
protected  org.aitools.programd.util.LRUCache.CacheItem<K,V>[] _entries
           
 
Constructor Summary
LRUCache(int initialCapacity)
          Create the LRU cache with a specific capacity.
 
Method Summary
 void clear()
          Clears the cache
 V get(K key)
          Get an item from the cache and make it most recently used.
 long getHitCount()
           
 long getMissCount()
           
 Iterator<LRUCache.Entry<K,V>> iterator()
           
 Iterator<K> keys()
           
 Iterator<K> keys(Iterator<K> oldIter)
           
 V put(K key, V value)
          Puts a new item in the cache.
 V putIfNew(K key, V value)
          Puts a new item in the cache.
 V remove(K key)
          Removes an item from the cache
 boolean removeTail()
           
 int size()
           
 Iterator<V> values()
           
 Iterator<V> values(Iterator<V> oldIter)
           
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

_entries

protected org.aitools.programd.util.LRUCache.CacheItem<K,V>[] _entries
Constructor Detail

LRUCache

public LRUCache(int initialCapacity)
Create the LRU cache with a specific capacity. Originally called "LruCache". Some minor changes (in coding style and formatting) made by Noel.

Parameters:
initialCapacity - minimum capacity of the cache
Method Detail

size

public int size()
Returns:
the current number of entries in the cache

clear

public void clear()
Clears the cache


get

public V get(K key)
Get an item from the cache and make it most recently used.

Parameters:
key - key to lookup the item
Returns:
the matching object in the cache

put

public V put(K key,
             V value)
Puts a new item in the cache. If the cache is full, remove the LRU item.

Parameters:
key - key to store data
value - value to be stored
Returns:
old value stored under the key

putIfNew

public V putIfNew(K key,
                  V value)
Puts a new item in the cache. If the cache is full, remove the LRU item.

Parameters:
key - key to store data
value - value to be stored
Returns:
the value actually stored

removeTail

public boolean removeTail()
Returns:
the last item in the LRU

remove

public V remove(K key)
Removes an item from the cache

Parameters:
key - the key to remove
Returns:
the value removed

keys

public Iterator<K> keys()
Returns:
the keys stored in the cache

keys

public Iterator<K> keys(Iterator<K> oldIter)
Parameters:
oldIter - the old iterator to use
Returns:
keys stored in the cache using an old iterator

values

public Iterator<V> values()
Returns:
the values in the cache

values

public Iterator<V> values(Iterator<V> oldIter)
Parameters:
oldIter - the old iterator
Returns:
the values of the old iterator

iterator

public Iterator<LRUCache.Entry<K,V>> iterator()
Returns:
the entries

getHitCount

public long getHitCount()
Returns:
the hit count.

getMissCount

public long getMissCount()
Returns:
the miss count.