如何在不迭代的情况下从哈希映射中获取一个条目

新手上路,请多包涵

如果密钥未知,是否有一种优雅的方法可以从 HashMap 只获取一个 Entry<K,V> 而无需迭代。

由于进入的顺序并不重要,我们可以说类似

hashMapObject.get(zeroth_index);

虽然我知道不存在这样的索引方法。

如果我尝试了下面提到的方法, 它仍然必须获取 hashmap 的所有条目集

 for(Map.Entry<String, String> entry : MapObj.entrySet()) {
    return entry;
}

欢迎提出建议。

编辑:请建议任何其他数据结构以满足要求。

原文由 nilesh 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 409
2 个回答

Jesper 的回答很好。另一种解决方案是使用 TreeMap(您要求其他数据结构)。

 TreeMap<String, String> myMap = new TreeMap<String, String>();
String first = myMap.firstEntry().getValue();
String firstOther = myMap.get(myMap.firstKey());

TreeMap 有开销,因此 HashMap 更快,但这只是作为替代解决方案的一个示例。

原文由 Per Östlund 发布,翻译遵循 CC BY-SA 2.5 许可协议

地图没有排序,所以没有“第一个条目”这样的东西,这也是为什么 Map (或 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();

(注意:省略了空地图的检查)。

您的代码没有获取地图中的所有条目,它会立即返回(并跳出循环)找到的第一个条目。

要打印第一个元素的键和值:

 System.out.println("Key: "+entry.getKey()+", Value: "+entry.getValue());

注意:调用 iterator() 并不意味着您正在遍历整个地图。

原文由 Jesper 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题