As an alternative I'd like to put forward my own CachingHashMap available as a part of my game library with the source code
here (the library is still yet to be completed).
Mine is just a HashMap that caches it's entry nodes when you clear it and remove items. As such if you fill it with a million entries and then remove them all, it still has a million entry nodes stored internally. The advantage is that if you add another million then rather then making new entry nodes it'll re-use all the entry nodes from the last million. This avoids the cost of creating objects (which is where the performance is from) and means that internally it's dereferencing no objects for the GC to clean up (to clarify; it does not hang on to a reference to the items you add, just to it's internal entry nodes).
In terms of CPU performance, using my own very cheap and brief benchmarks I find the FastMap to be marginally faster then then the HashMap but marginally slower then my CachingHashMap.
Thanks JL235, that will be fantastic if i can use your CachingHashMap implementation. The Javolution FastMap requires me to use the whole 0.4MB package so your single file is much better. The only benefit that Javolution provides is that add() is constant time since the underlying array is never copied when the hashmap outgrows its capacity, but I have no use for that since my map is always re-used so it will always stay big. Thanks

Out of interest, what was your reason for making the CachingHashMap? Where did you need it?
My only thought is that there shouldn't be ArrayLists in an A* implementation in the first place. The algorithm requires a priority queue (there's a heap-based PriorityQueue class in java.util that would work), and a hash map can be used in conjunction to speed up contains() checks on the queue.
If you don't expect duplicates in the open list to occur very often then you don't need a contains() check (the duplicates will just order themselves in the queue) and the hash map can be left out.
Hi Jono, thanks for your comments. Yes I use a BinaryHeap priority queue for the openList, but to eliminate use of List.contains() I also use a HashMap for the open and closed lists.