You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@commons.apache.org by apache-commons <ap...@weygandt.com> on 2002/01/09 18:52:14 UTC
LRUMap has interesting behavior, not quite LRU
Commons developers,
I noticed that when the list fills up, entries added are at the bottom of
the list, therefore new entries bump the latest entry off the list - not the
LRU algorithm I would expect.
I have the source from commons-collections-1.0, I have also attempted to
verify that it is the latest in cvs. LRUMap.java is from version 1.1.
Further I have noticed that if you remove an item, the "bubbling up" stops
at that removed item.
Simple test, put the following code fragment into LRUMap and run:
BTW - I found an old copy of: org/apache/tomcat/util/LRUCache.java, which
has less features, and uses Hashtable (not HashMap) if anyone is interested.
Jon
-------------------------------
public void report()
{
System.out.println("LRUMap report");
System.out.println(" maximumSize: " + maximumSize);
System.out.println(" size: " + size());
System.out.println(" bubbleList.size: " + bubbleList.size());
for(int i=0; i<bubbleList.size(); i++)
{
System.out.println(" " + i + "\t=" + bubbleList.get(i));
}
}
public static void main(String [] args)
{
LRUMap m = new LRUMap(5);
m.put("k1", "v1");
m.put("k2", "v2");
m.put("k3", "v3");
m.put("k4", "v4");
m.put("k5", "v5");
m.report();
m.put("k6", "v6");
m.put("k7", "v7");
m.report();
m.remove("k3");
m.report();
m.get("k7");
m.report();
m.get("k7");
m.report();
m.get("k7");
m.report();
m.get("k7");
m.report();
}
---------------------------------
/* The output with comments below */
/* List is full - OK for now */
LRUMap report
maximumSize: 5
size: 5
bubbleList.size: 5
0 =k1
1 =k2
2 =k3
3 =k4
4 =k5
/* after adding k6 and k7, only k7 remains - ?? */
LRUMap report
maximumSize: 5
size: 5
bubbleList.size: 5
0 =k1
1 =k2
2 =k3
3 =k4
4 =k7
/* k3 has been removed from the internal HasMap, remains in array */
LRUMap report
maximumSize: 5
size: 4
bubbleList.size: 5
0 =k1
1 =k2
2 =k3
3 =k4
4 =k7
/* one bubble up - OK */
LRUMap report
maximumSize: 5
size: 4
bubbleList.size: 5
0 =k1
1 =k2
2 =k3
3 =k7
4 =k4
/* it's stuck, no more bubbling for k7 */
LRUMap report
maximumSize: 5
size: 4
bubbleList.size: 5
0 =k1
1 =k2
2 =k3
3 =k7
4 =k4
LRUMap report
maximumSize: 5
size: 4
bubbleList.size: 5
0 =k1
1 =k2
2 =k3
3 =k7
4 =k4
LRUMap report
maximumSize: 5
size: 4
bubbleList.size: 5
0 =k1
1 =k2
2 =k3
3 =k7
4 =k4
--
To unsubscribe, e-mail: <ma...@jakarta.apache.org>
For additional commands, e-mail: <ma...@jakarta.apache.org>