如何从hashmap中获取一个条目而不进行迭代

问题

如果密钥未知,是否有一种优雅的方式从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];