问题
如果密钥未知,是否有一种优雅的方式从HashMap中获取oneEntry<K,V>
,无需迭代。
由于进入的顺序并不重要,我们可以说类似的东西
hashMapObject.get(zeroth_index);
虽然我知道没有这样的get by index方法。
如果我尝试下面提到的方法,它仍然必须得到hashmap的所有条目集。
for(Map.Entry<String, String> entry : MapObj.entrySet()) {
return entry;
}
欢迎提出建议。
编辑:请建议任何其他数据结构满足要求。
#1 热门回答(229 赞)
Map 不是有序的,因此没有"第一个条目"这样的东西,这也是为什么在2885443079(或HashMap
)上没有按索引获取方法的原因。
你可以这样做:
Map<String, String> map = ...; // wherever you get this from
// Get the first entry that the iterator returns
Map.Entry<String, String> entry = map.entrySet().iterator().next();
(注意:省略检查空 Map )。
你的代码不会获取 Map 中的所有条目,它会立即返回(并且会突破循环)并找到第一个条目。
要打印第一个元素的键和值:
System.out.println("Key: "+entry.getKey()+", Value: "+entry.getValue());
注意:Callingiterator()
并不意味着你正在迭代整个 Map 。
#2 热门回答(86 赞)
Jesper的答案很好。另一种解决方案是使用TreeMap(你要求其他数据结构)。
TreeMap<String, String> myMap = new TreeMap<String, String>();
String first = myMap.firstEntry().getValue();
String firstOther = myMap.get(myMap.firstKey());
TreeMap有一个开销,所以HashMap更快,但仅作为替代解决方案的一个例子。
#3 热门回答(26 赞)
我想迭代器可能是最简单的解决方案。
return hashMapObject.entrySet().iterator().next();
另一个解决方案(不太漂亮):
return new ArrayList(hashMapObject.entrySet()).get(0);
或者(不是更好):
return hashMapObject.entrySet().toArray()[0];