I have a situation where i want to save some objects into a HashTable(using this because i have multiple threads accessing the same object). I want to specify the maximum size of the collection to be for example 10. If the size of the table exceeds 10, we should push the first entry out of the HashTable and add the new object into the collection of the HashTable. I also want this collection to be as key value pairs.
There could be other solutions if you explain your full requirements. From what you have exaplained:
You will have to write your own implementation. You can do this by writing a wrapper, but inside the wrapper you can make use of the standard Java Collection classes. For example you may have an instance of a Hashtable to support key, value pairs and an ordinary arraylist to keep tabs of the order with the same keys. Once you reach 10 objects, remove first object from the array list and use that object to remove it from the Hashtable as well. Take care to synchronize your methods correctly, since you will be using two different collections (i.e. a map and a list) [ August 17, 2008: Message edited by: arulk pillai ]
There is no standard library class called HashTable. If you mean Hashtable, then Bear's answer applies. Otherwise I guess you mean something more general - a hash-table-like thingie that also remembers what order its entries were added in, and allows you to add special behavior when a new item is added. It wouldn't be too difficult to build something like this yourself, I think. But have you taken a look at LinkedHashMap? They've done most of the work for you - you just need to extend it and override removeEldestEntry() - see the documentation.
[ben]: (using this because i have multiple threads accessing the same object)
Hm, well, you can always use Collections.synchronizedMap() to provide just as much mostly-illusory thread safety as Hashtable provides. In general though, you may well need to analyze your code more carefully, and consider what happens if other threads act in between method calls to your map. Synchronization within the map (or for Collections.synchronizedMap(), within a wrapper for the map) is often insufficient to truly protect your code. Consider explicitly synchronizing within the calling class to provide a higher level of protection. Or use a better concurrent Map API, such as that provided by ConcurrentHashMap. Unfortunately there is, as yet, no ConcurrentLinkedHashMap, so to provide this functionality you would have to write your own.