【问题标题】:Retrieve key of Map by index [duplicate]按索引检索Map的键[重复]
【发布时间】:2012-12-08 13:35:30
【问题描述】:

可能重复:
Bi-directional Map in Java?

当键不是数字且无序时,如何通过索引检索Map 的键?

例如:

Map<String, Integer> test = new TreeMap<String, Integer>();
test.put("a", 1);
test.put("b", 2);
test.put("z", 3);
test.put("m", 4);

如果我有索引 2,我想获得 z,如果我有索引 0,我想获得 a。

我知道我可以使用增量进行脏循环来获取它,但是还有另一种聪明的方法吗?

【问题讨论】:

  • 一个可能的解决方案:stackoverflow.com/questions/3895525/…
  • 由于地图是排序的,你不能通过索引值来预测键的值
  • 你不能。您可以entrySet() 和迭代 (O(n)) 但无需实现/保留反向映射,这就是您所拥有的。
  • +1 @BrianRoach。答案是你不能。 (虽然如果你使用Guava'sImmutableMap,你可以使用map.keySet().asList().get(index)。)
  • 索引是基于插入顺序还是值顺序?

标签: java map


【解决方案1】:

让这有点令人困惑的是,您是根据添加项目的顺序还是根据键的自然顺序(例如:字母顺序)来引用索引

您可以使用 map.keySet() 获取可能的键列表,但不能保证键集将按照您添加它的顺序

如果您想以某种顺序(例如:字母顺序)保存数据,您可以使用 TreeMap 而不是 HashMap。如果您更喜欢其他排序方式,您可以实现自己的比较器

【讨论】:

  • 是的,对不起,我弄错了,它是 TreeMap 而不是 HashMap。我对我的帖子进行了编辑。 Nivas 建议我一个链接,并且有一个很好的方法来做我正在寻找的东西。除非有人为我提供另一个更好的解决方案,否则我会使用它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-21
  • 2022-01-07
  • 2011-06-15
  • 1970-01-01
  • 2010-09-16
  • 1970-01-01
相关资源
最近更新 更多