I'm looking for a class in java that has key-value association, but without using hashes. Here is what I'm currently doing:
- Add values to a
Hashtable
. - Get an iterator for the
Hashtable.entrySet()
. - Iterate through all values and:
- Get a
Map.Entry
for the iterator. - Create an object of type
Module
(a custom class) based on the value. - Add the class to a JPanel.
- Get a
- Show the panel.
The problem with this is that I do not have control over the order that I get the values back, so I cannot display the values in the a given order (without hard-coding the order).
I would use an ArrayList
or Vector
for this, but later in the code I need to grab the Module
object for a given Key, which I can't do with an ArrayList
or Vector
.
Does anyone know of a free/open-source Java class that will do this, or a way to get values out of a Hashtable
based on when they were added?
Thanks!
Best Answer
I suggest a
LinkedHashMap
or aTreeMap
. ALinkedHashMap
keeps the keys in the order they were inserted, while aTreeMap
is kept sorted via aComparator
or the naturalComparable
ordering of the elements.Since it doesn't have to keep the elements sorted,
LinkedHashMap
should be faster for most cases;TreeMap
hasO(log n)
performance forcontainsKey
,get
,put
, andremove
, according to the Javadocs, whileLinkedHashMap
isO(1)
for each.If your API that only expects a predictable sort order, as opposed to a specific sort order, consider using the interfaces these two classes implement,
NavigableMap
orSortedMap
. This will allow you not to leak specific implementations into your API and switch to either of those specific classes or a completely different implementation at will afterwards.