如何获取地图的最后一个键/值? 例如:
Map<String,Integer> ret = new HashMap<String,Integer>();
这是ret的值:
{33=1, 12=2, 21=2, 93=2, 48=9, 68=10}
答案 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,否则您可以获得第一个和最后一个密钥..