我用番石榴Multimap之:在列表的最後番石榴Multimap。把價值兩至年底,並開始
Multimap<Integer, String> commandMap = LinkedHashMultimap.create();
...
actionMap.put(index, "string"); // Put value at the end of list.
該命令將其值。但我需要能夠添加到最後和開始。 有沒有辦法解決這個問題?
我用番石榴Multimap之:在列表的最後番石榴Multimap。把價值兩至年底,並開始
Multimap<Integer, String> commandMap = LinkedHashMultimap.create();
...
actionMap.put(index, "string"); // Put value at the end of list.
該命令將其值。但我需要能夠添加到最後和開始。 有沒有辦法解決這個問題?
這不是一個ListMultimap
,這是一個SetMultimap
。如果您需要ListMultimap
,請使用ArrayListMultimap
或LinkedListMultimap
。
鏈接的散列表不能用作列表,因爲它只是一個常規映射,其中保存了添加節點的順序,供您稍後使用(例如使用迭代器)。這就是爲什麼你沒有任何函數來添加一個索引的元素。
如果你想一個元素添加到LinkedHashMultimap
的beggining你需要創建一個新的,加上老LinkedHashMultimap
所有元素到新的一個:
Multimap<Integer, String> newMap = LinkedHashMultimap.create();
newMap.put(key,valueForTheFirstIndex); // first (and only) object of new map
newMap.putAll(commandMap); // adds with the order of commandMap
commandMap = newMap;
的增加都將增加newMap的所有其他元素使valueForTheFirstIndex
實際上停留在第一個索引中。請注意,如果你這樣做,你就失去了使用映射的優點,因爲如果總是添加到數組的起始處,那麼複雜度將是O(n^2)。如果你想添加索引,你應該在添加東西時使用列表,然後轉換爲鏈接的哈希映射以便快速訪問。
(出題範圍)
,你必須有一個名爲index
不是一個指標,但實際上是一個重要的價值。你在地圖上沒有索引。
actionMap.put(index, "string");
正如你可以在文檔中寫着:http://docs.guava-libraries.googlecode.com/git/javadoc/com/google/common/collect/LinkedHashMultimap.html
put(K key, V value) // you don't see any reference to index there
謝謝。有什麼更好的方法:新的Multimap或新的ArrayList,然後replaceValues? – Aleksandr 2012-07-07 21:48:59
這實際上取決於你想要做什麼:p如果你想訪問項目放置的順序,你應該使用一個列表。 – fmsf 2012-07-07 21:56:20
或者...你可以使用正確的'ListMultimap',它可以讓你像使用'List'一樣使用它...... – 2012-07-07 22:37:11