获取地图中的最后一个值

时间:2012-01-18 07:28:54

标签: java map

如何获取地图的最后一个键/值? 例如:

Map<String,Integer> ret = new HashMap<String,Integer>();

这是ret的值:

{33=1, 12=2, 21=2, 93=2, 48=9, 68=10}

6 个答案:

答案 0 :(得分:4)

您无法使用HashMap执行此操作,因为未订购密钥。考虑使用LinkedHashMap

您可以使用此方法获取最后一个元素:

public <K,V> Map.Entry<K,V> getLast(LinkedHashMap<K,V> map) {
    Iterator<Map.Entry<K,V>> iterator = map.entrySet().iterator();
    Map.Entry<K, V> result = null;
    while (iterator.hasNext()) {
        result = iterator.next();
    }
    return result;
}

答案 1 :(得分:4)

HashMap是无序地图,因此它没有“第一个”或“最后一个”的概念。
如果您想要一个按插入顺序保留内容的地图,可以使用LinkedHashMap,然后迭代其entrySet()方法以选择第一个和最后一个值。
您还可以使用SortedMap接口(TreeMap impl。)按键的自然顺序(或提供的Comparator)对插入的条目进行排序。

答案 2 :(得分:2)

当谈到HashMap时,区分“第一”和“最后”是不可能的(或者更有意义)。如果要保留广告订单,可能需要使用LinkedHashMap<K,V>。但话又说回来,你应该详细说明你的问题,让我们知道要求确切的用例。

答案 3 :(得分:1)

因为没有定义的顺序,如果你运气不好,你基本上会得到一个随机元素。

否则你可以采用HashMap的方式 - &gt; getEntrySet - &gt; toArray - &gt;得到(大小-1)

答案 4 :(得分:1)

从技术上讲,您可以通过以下方式从地图中获取第一个对象:

Map.Entry<Integer,Integer> entry = map.entrySet().iterator().next();

最后一个通道:

Iterator<Map.Entry<Integer,Integer>> iter = map.entrySet().iterator();
Map.Entry<Integer,Integer> entry = null;
while(iter.hasNext()) {
    entry = iter.next();
}
// now you have the "last" item in the map stored in 'entry'

但是,正如其他答案所述,这对HashMap来说并不意味着什么。但是,用LinkedHashMap替换它,你可以使用上面的代码获得第一个和最后一个插入的对。

答案 5 :(得分:0)

除非您使用http://docs.oracle.com/javase/6/docs/api/java/util/SortedMap.html,否则您可以获得第一个和最后一个密钥..