Guava Multimap.把价值放在末尾和开头



我使用Guava Multimap:

Multimap<Integer, String> commandMap = LinkedHashMultimap.create();
...
actionMap.put(index, "string"); // Put value at the end of list.

此命令将值放在列表的末尾。但我需要能够在结尾和开头都加上。有办法解决这个问题吗?

这不是ListMultimap,而是SetMultimap。如果需要ListMultimap,请使用ArrayListMultimapLinkedListMultimap

链接的哈希映射不能作为列表使用,因为它只是一个常规映射,其中保留了添加节点的顺序,供您稍后使用(例如迭代器)。这就是为什么您没有任何函数来添加带有索引的元素。

如果你想在LinkedHashMultimap的开头添加一个元素,你需要创建一个新的元素,并将旧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;

add all将把所有其他元素添加到newMap中,使得CCD_。注意,如果你这样做,你将失去使用映射的优势,因为如果总是添加到数组的开头,你的复杂性将是O(n^2)。如果你想添加到索引中,你应该在添加内容时使用一个列表,然后转换为linkedhashmap以快速访问。


(不在问题范围内)

名为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

最新更新