2014-12-07 4 views
1

Я использую LinkedHashMap в моих code.This моя карта:Добавить элемент в верхней части LinkedHashMap

LinkedHashMap<String, Conversation> conversationsMap=new LinkedHashMap<String, Conversation>(); 

Я добавление элементов этой карты со следующей строкой:

conversationsMap.put("test",Conversation); 

Но этой линии добавление элемента в last.I нужно добавить этот элемент в начало этой карты. Как я могу это сделать?

ответ

1

Цель связанной хэш-карты состоит в том, чтобы сохранить элементы заказа, которые были добавлены, поэтому она идет в конце.

Вы можете создать новую связанную карту хэша с новым элементом и добавить все остальные в конце.

Я не вижу никаких методов в документах API, которые могли бы сделать это любым другим способом.

+0

Спасибо. Я использую эту карту в arraylist.Now, я меняю список, чтобы достичь этого. Это хороший подход? – Okan

+0

Не знаете, как дорого изменить список. Мое решение довольно чистое. Попробуй! – Fortyrunner

+0

Можете ли вы привести пример для этого? – Okan

1

LinkedHashMap сохраняет порядок вставки. Чтобы добавить его в первую очередь, вам необходимо выполнить итерацию по старой карте и вставить значения на новую карту.

0

Я не думаю, что стандартный JDK предоставляет способ сделать это. В основном LinkedHashMap сохраняет порядок вставки, добавляя новую запись на новую карту, а затем другие записи из старой карты будут неэффективными, так как вам придется перебирать все записи старой карты каждый раз, когда вы хотите добавить новая пара ключ-значение.

Одним из способов может стать создание собственного pojo и использование метода LinkedList<MyData> с использованием метода addFirst. Если вам нужна уникальность ключей, вы можете провести параллель с Set<String>, чтобы проверить это ограничение.

class MyData { 
    private final String key; 
    private final Conversation value; 
    //constructor, getter, hashcode, equals 
} 

В противном случае в Apache Commons Collections, что обеспечивает put(int index, K key, V value) метод (никогда не тестировался) ListOrderedMap, но он должен сделать трюк.

+0

Спасибо, вы можете прочитать мой комментарий выше? – Okan

+0

@Okan Я не понимаю. _ «Я использую эту карту в arraylist» _. Это означает, что у вас есть список карт? Если да, то у меня нет цели вашего вопроса, так как вы говорите о самой карте. –

+0

Нет, у вас это не так. Я делаю вот так: http://prntscr.com/5ed4ds Я добавляю элементы к последней карте, тогда я меняю список, и последний элемент будет вершиной списка. Это хороший подход к производительности или т. д. – Okan

Смежные вопросы