我有一个如下的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
是否有任何功能我可以获得前三名(KV1,KV2,KV3)或底部3(KV3,KV4,KV5)键值对?或者可以是我可以删除前n个或后n个元素的任何函数?
提前致谢。
答案 0 :(得分:3)
您可以在没有迭代的情况下从地图中删除n个元素
map.keySet().removeAll(Arrays.asList(map.keySet().toArray()).subList(0, 5));
答案 1 :(得分:2)
这个问题有一些可怕的答案。
首先,它取决于你的意思。广告订单或自然排序订单?
LinkedHashMap保留了广告订单。 TreeMap按自然排序顺序维护其键。
如果它是已排序的地图,那么您可以使用Treemap.headMap(K key),tailMap()和subMap()请求查看密钥;
如果是它的插入顺序,那么您必须自己提取子图。 Guava在地图中提供了一个名为Maps.filterKeys的帮助程序,它允许您查看由传入的谓词所覆盖的基础地图。如果您不想复制地图,只需查看不同的地图即可。当然,您可以随时复制生成的地图,如果这是您想要的,或者推广您自己更专业的案例。
This question shows how to write a generic subMap method for LinkedHashMaps.
答案 2 :(得分:0)
使用SortedMap,例如TreeMap而不是HashMap。然后,您可以按顺序遍历键。这使得查找和删除3个最小的键成为可能。通过查找并删除最后一个键三次删除三个最大的键。
答案 3 :(得分:0)
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());
}