首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >删除地图的顶部或底部n个元素

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

Stack Overflow用户
提问于 2014-11-06 17:43:13
回答 4查看 2.5K关注 0票数 3

我有一个如下所示的HashMap:

代码语言:javascript
复制
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个元素的函数?

提前谢谢。

EN

回答 4

Stack Overflow用户

发布于 2014-11-06 17:53:44

您可以在不进行迭代的情况下从map中删除n个元素

代码语言:javascript
复制
map.keySet().removeAll(Arrays.asList(map.keySet().toArray()).subList(0, 5));
票数 4
EN

Stack Overflow用户

发布于 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.

票数 2
EN

Stack Overflow用户

发布于 2014-11-06 17:55:46

LinkedHashMap按条目插入的顺序在map中维护条目的链表。

代码语言:javascript
复制
    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());
    }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26776106

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档