Java 按索引检索地图的键

Java 按索引检索地图的键,java,map,Java,Map,可能重复: 当键不是数字且无序时,如何通过索引检索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); Map test=newtreemap(); 测试。放置(“a”,1); 测试。放置(“b”,2); 测试。放置(“z”,3); 测试。放

可能重复:

当键不是数字且无序时,如何通过索引检索
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);
Map test=newtreemap();
测试。放置(“a”,1);
测试。放置(“b”,2);
测试。放置(“z”,3);
测试。放置(“m”,4);
如果我有索引2,我想得到
z
,如果我有索引0,我想得到
a


我知道我可以通过增量进行脏循环来获得它,但还有其他聪明的方法吗?

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

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


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

一个可能的解决方案:当映射被排序时,您不能通过索引值预测键的值,您不能。您可以
entrySet()
和迭代(O(n)),但不需要实现/保留反向映射,这就是您所拥有的一切。+1@BrianRoach。答案是你不能。(虽然如果您使用了
ImmutableMap
,您可以执行
map.keySet().asList().get(index)
)索引是基于插入顺序还是基于值顺序?是的,对不起,我弄错了,它很好是TreeMap而不是HashMap。我已经对我的帖子进行了编辑。Nivas建议给我一个链接,并且有一个很好的方法来完成我正在寻找的任务。除非有人给我提供更好的解决方案,否则我会使用它。