Хотя немного опоздать, чтобы ответить. Но вариант состоит в том, чтобы использовать LinkedHashMap
: эта карта сохраняет заказ в соответствии с вставкой элементов, как и все предлагали. Однако, как предупреждение, у него есть конструктор LinkedHashMap(int initialCapacity, float loadFactor, boolean accessOrder)
, который создаст связанную хэш-карту, порядок итерации которой является порядком, в котором его записи были последними accessed
. Не используйте этот конструктор для этого случая.
Однако, если бы мне нужна была такая функциональность, я бы расширил ее и выполнил бы мою необходимую функцию, чтобы повторно использовать их в способе ООП.
class MyLinkedMap<K, V> extends LinkedHashMap<K, V>
{
public V getValue(int i)
{
Map.Entry<K, V>entry = this.getEntry(i);
if(entry == null) return null;
return entry.getValue();
}
public Map.Entry<K, V> getEntry(int i)
{
// check if negetive index provided
Set<Map.Entry<K,V>>entries = entrySet();
int j = 0;
for(Map.Entry<K, V>entry : entries)
if(j++ == i)return entry;
return null;
}
}
Теперь я могу создать его экземпляр и может получить запись и значение в любом случае я хочу:
MyLinkedMap<String, Integer>map = new MyLinkedMap<>();
map.put("a first", 1);
map.put("a second", 2);
map.put("a third", 3);
System.out.println(map.getValue(2));
System.out.println(map.getEntry(1));
Выход:
3
a second=2
увидеть это http://stackoverflow.com/questions/8502542/find-element-position-in-a-java-treemap –