2014-12-30 1 views
1

Есть ли способ переместить элемент в пределах LinkedHashMap? В частности, я хотел бы переместить элемент в первую позицию. Я знаю, что если я хочу, чтобы добавить элемент в конец концов, я мог бы просто сделать:Переместить элемент в LinkedHashMap

LinkedHashMap<String,Integer> items = new LinkedHashMap<String,Integer>(); 
//...add some items 
int i = items.get("removedItem"); 
items.remove("removedItem"); 
items.put("removedItem",i); 
+0

Возможный дубликат http://stackoverflow.com/questions/7679819/how-to-add-element-at-specific-index-position-in-linkedhashmap – wassgren

+1

No. Даже если 'LinkedHahsMap' уважает вставку порядок на итерации, он по-прежнему реализует «карту», ​​для которой нет такого метода, как «положить элемент в первую позицию». Среди коллекций только «Список» может сделать это надежно. – fge

ответ

1

Это вы хотите сохранить тот же Map экземпляр, вы можете сделать это в 3-х линий, как это.

Map<Integer, String> map = new LinkedHashMap<>(); 
map.put(1, "One"); 
map.put(2, "Two"); 
map.put(3, "Three"); 
map.put(4, "Four"); 

Map<Integer, String> copy = new LinkedHashMap<>(map); 
map.keySet().retainAll(Collections.singleton(3)); 
map.putAll(copy); 

System.out.println(map); 
+0

В действительности мой 'LinkedHashMap'' 'String, ArrayList >'. Будет ли добавлено 'ArrayList' для' 3', содержащееся в 'copy', на' ArrayList' в 'map'? –

+0

'ArrayList' для ключа в' map' - это тот же 'ArrayList', что и в' copy', поэтому он не должен иметь никакого значения. –

+0

Вы имели в виду ключ или ценность? –

2

Для случая перемещения элементов на переднюю панель, вы можете создать новую LinkedHashMap с выбранным вами заказом. например

LinkedHashMap<K,V> newMap = new LinkedHashMap<K,V>(oldMap.size()); 
V valueIWantToBeFirst= oldMap.remove(keyIWantToBeFirst); 
newMap.put(keyIWantToBeFirst, valueIWantToBeFirst); 
newMap.putAll(oldMap); // keeps previous order for all remaining entries