java - 在插值法中,如何求键/值的位置

  显示原文与译文双语对照的内容
0 0

嗨我有个LinkedHashMap ( 称为info ) 包含name/age ( string/int ) 对。 我想知道,怎样让ꡣ key/value如果我输入密钥。 比如我LinkedHashMap看上去这样{bob=12,jeremy=42 carly=21}我也要搜索jeremy,应返回1 作为其在位置1 。 我希望我可以用类似info .getIndex( " jeremy " )

时间:原作者:5个回答

0 0

HashMap实现通常在联合国下令。 Iteration.

LinkedHashMappredictablely 有序。 Iteration( 插入顺序),但不公开 List接口和一个 LinkedList( 这也是设计该密钥集插入顺序) 不跟踪通过索引定位自己在哪,也是很高效的查找索引中。 。 LinkedHashMap在用户在该不公开 LinkedList要么。

实际 " 链接列表" 行为是特定于实现的。 有些人实际使用的实例 LinkedList那麽多只需要 Entry在上一个和下一个音轨 Entry并使用该文件作为其实现。 不要假设任何东西而不需要查看源代码。

KeySet所在的键,也不保证顺序,因为使用的哈希算法的底层数据结构的继承放在下 HashMap. 所以你用不着这玩意儿 !

要做到这一点的唯一途径,而无需编写自己的实现,就是行走。 Iterator它使用镜像 LinkedList并保持一个计数当前所在的位置,这将是非常高效和任务状态中。

Solution

听起来好像你想要被索引位置 初始插入顺序,你必须将镜像中的键KeySet在类似。 ArrayList然后就什么都要同步的更新。 HashMap并将其用于查找位置。 创建一个sub class of类 HashMap,比如 IndexedHashMap文件,加入下面这 ArrayList内部,添加一个 .getKeyIndex(<K> key)委托给内部的 ArrayList.indexOf()可能是最好的方法去操作。

这就是 LinkedHashMap进行,但使用 LinkedList人们社会生活的先决条件 KeySet而非 ArrayList.

原作者:
0 0
int pos = new ArrayList<String>(info.keySet()).indexOf("jeremy")
原作者:
0 0

linkedHashMap具有" 可预知迭代顺序" ( java doc ) 。 项目,虽然不知道他们的位置,因此你需要循环访问集合来获取它。 如果你正维护着一幅大地图,你可能希望使用不同的结构进行存储。

编辑: 阐明了迭代

原作者:
...