2012-12-20 43 views
2

可能重复:
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); 

我想z如果我有指数2或a如果我有索引0

我知道我可以做肮脏的循环与增量得到它,但有另一种聪明的方式来做到这一点?

+4

一个可能的解决方案:http://stackoverflow.com/questions/3895525/iterate-to-find-a-map-entry-at-an-index – Nivas

+1

由于地图已排序,因此无法通过索引值 –

+1

预测关键字的值。您不能。你可以通过'entrySet()'和迭代(O(n)),而不需要实现/保留一个你已经拥有的反向映射。 –

回答

1

是什么让这个有点困惑是,无论您是基于项目被添加,或者基于密钥的自然排序的顺序参照指标(如:按字母顺序排列)

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

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

+0

对不起,我犯了错误,很好,TreeMap不是HashMap。我在我的帖子上做了一个修改。尼瓦斯向我建议了一个链接,并且有一种很好的方式来做我正在寻找的东西。除非有人提供给我另一个更好的解决方案 –