Java 删除地图的顶部或底部n个元素

Java 删除地图的顶部或底部n个元素,java,map,hashmap,Java,Map,Hashmap,我有一个如下所示的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个元素的函数 提前感谢。使用分类地图,例如

我有一个如下所示的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个元素的函数


提前感谢。

使用分类地图,例如树形图,而不是哈希图。然后可以按顺序遍历这些键。这样就可以找到并删除3个最小的键。通过查找并删除最后一个键三次来删除最大的三个键。

这个问题有一些糟糕的答案


首先,这取决于你所说的顶部是什么意思。插入顺序还是自然排序顺序

A保留插入顺序。A按自然排序顺序维护其键

如果是已排序的贴图,则可以使用、tailMap()和

如果是插入顺序,那么您必须自己提取子映射。Guava在Maps中提供了一个名为的助手,该助手将允许您查看由传入的谓词过滤的基础映射。如果您不想复制地图,只需以不同的方式查看即可。当然,如果你想要的话,你可以随时复制结果图,或者推出你自己更专业的案例


您可以通过这种方式从地图中删除n个元素,而无需进行迭代

map.keySet().removeAll(Arrays.asList(map.keySet().toArray()).subList(0, 5));

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());
    }
Map Map=newlinkedhashmap();
地图放置(“1”、“1”)//KV1
地图。放置(“3”、“3”)//KV2
地图放置(“2”、“2”)//KV3
地图放置(“5”、“5”)//KV4
地图放置(“4”、“4”)//KV5
对于(Map.Entry mapentry:Map.entrySet()){
System.out.println(mapentry.getKey());//您可以获取键和值
System.out.println(mapentry.getValue());
}

使用
TreeMap
而不是
HashMap
。它有像
firstKey
lastKey
subMap
这样的方法可以帮助您。这取决于您所说的top是什么意思。插入顺序还是自然排序顺序?噢,如果你指的是插入顺序,那么你想要的类是
LinkedHashMap
。是的,我指的是插入顺序。然后你必须使用LinkedHashMap,而不是HashMapOoh,这非常好。如果您只提到
m
LinkedHashMap
,这将是正确的答案。