我使用Guava Multimap:
Multimap<Integer, String> commandMap = LinkedHashMultimap.create();
...
actionMap.put(index, "string"); // Put value at the end of list.
此命令将值放在列表的末尾。但我需要能够在结尾和开头都加上。有办法解决这个问题吗?
这不是ListMultimap
,而是SetMultimap
。如果需要ListMultimap
,请使用ArrayListMultimap
或LinkedListMultimap
。
链接的哈希映射不能作为列表使用,因为它只是一个常规映射,其中保留了添加节点的顺序,供您稍后使用(例如迭代器)。这就是为什么您没有任何函数来添加带有索引的元素。
如果你想在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