Caches and guaranteed-order Hashtables etc - the e

Real title: Caches and guaranteed-order Hashtables etc - the easy way (Sorry; this forum system sucks: short maximum topic-name length!).

Java now has support for very easy-to-make LRU-caches. It also provides a very simple way of making ANY Collection always iterate its contents in the same order (kind of ;). Yet another reason to upgrade to 1.4, I’m afraid ;).

I was developing with 1.4 for several months before I realised this had been added - it doesn’t seem to have got much press alongside NBIO, regexp’s, XML parsers, etc. Hence I thought I’d bring it to people’s attention.

It’s all provided by a new class within java.util.*: LinkedHashMap. The API docs have full instructions on how to use it in both ways; if you have any difficulty, let me know and I’ll try and help (I frequently need caches for various things, and ditto with iteration-order-preservation, so I’ve used it quite a bit by this point).

This is a little offtopic but I think ppl implementing a cache might find SoftReferences to be an useful alternative. For those that don’t know a SoftReference is a link will break, provided certian requriements are met, and allow objects to be GCed instread of letting an OutOfMemoryException occur.

I wrote a web app where behind the scenes some heavy weight network connections we being made on a per user basis. I wanted to be able to cache and reuse these connections but also not have to worry about running out of memory. So I added SoftReferences between the network connections and my connection pool for each user. The code ran fine but the SoftReferences were breaking too soon. After doign a lot of searching I found that:

SoftReferences only work as desired when the -server flag is passed to the JVM. With the -client JVM a SoftReference is a lot like a WeakReference which isn’t quite what I wanted. Hopefully any game server writers will find this useful.