我有一个如下所示的HashMap:
map.put("1","One"); \\KV1
map.put("3","Three"); \\KV2
map.put("2","Two"); \\KV3
map.put("5","Five"); \\KV4
map.put("4","Four"); \\KV5有没有什么函数可以让我得到前3个(KV1,KV2,KV3)或后3个(KV3,KV4,KV5)键值对?或者可以是任何可以删除前n个或后n个元素的函数?
提前谢谢。
发布于 2014-11-06 17:53:44
您可以在不进行迭代的情况下从map中删除n个元素
map.keySet().removeAll(Arrays.asList(map.keySet().toArray()).subList(0, 5));发布于 2014-11-06 17:53:28
这个问题有一些糟糕的答案。
首先,这取决于你所说的top是什么意思。插入顺序还是自然排序顺序?
LinkedHashMap保留插入顺序。TreeMap以自然排序的顺序维护它的键。
如果它是一个排序映射,那么您可以使用Treemap.headMap(K key)、tailMap()和subMap()(http://docs.oracle.com/javase/7/docs/api/java/util/TreeMap.html#subMap(K,%20boolean,%20K,%20boolean%29);
如果是插入顺序,那么您必须自己提取子映射。Guava在map中提供了一个名为Maps.filterKeys的助手,它允许您查看通过传入的谓词进行筛选的底层地图。如果您不想复制地图,只需以不同的方式查看它,这将非常有用。当然,如果需要的话,您可以随时复制生成的map,或者使用您自己的更特殊的案例。
This question shows how to write a generic subMap method for LinkedHashMaps.
发布于 2014-11-06 17:55:46
LinkedHashMap按条目插入的顺序在map中维护条目的链表。
Map<String,String> map = new LinkedHashMap<String, String>();
map.put("1","One"); //KV1
map.put("3","Three"); //KV2
map.put("2","Two"); //KV3
map.put("5","Five"); //KV4
map.put("4","Four"); //KV5
for(Map.Entry<String, String> mapentry : map.entrySet() ){
System.out.println(mapentry.getKey()); // you can get the keys and values
System.out.println(mapentry.getValue());
}https://stackoverflow.com/questions/26776106
复制相似问题