如何使用键获取LinkedHashMap中键/值的位置

2022-09-01 02:34:32

我有一个(称为信息)包含名称/年龄(字符串/整数)对。如果我输入键,如何获取键/值的位置?例如,如果我看起来像这样,我要搜索,它应该返回其位置1。我希望我能使用类似的东西。LinkedHashMapLinkedHashMap{bob=12, jeremy=42, carly=21}jeremy1info.getIndex("jeremy")


答案 1

HashMap对于 ,通常的实现是无序的。Iteration

LinkedHashMap对于(插入顺序)是可预测的,但不公开接口,并且(镜像键集插入顺序)也不跟踪索引位置本身,查找索引也是非常无效的。也不会向内部公开引用。IterationListLinkedListLinkedHashMapLinkedList

实际的“链表”行为是特定于实现的。有些人可能实际上使用一些实例,许多人只是跟踪上一个和下一个,并将其用作其实现。不要在不查看来源的情况下假设任何事情。LinkedListEntryEntry

包含键的 也不能保证顺序,因为用于放置在继承的 后备数据结构中的哈希算法 。所以你不能使用它。KeySetHashMap

在不编写自己的实现的情况下执行此操作的唯一方法是使用镜像并保持计数的位置,这对于大型数据集来说非常无效。IteratorLinkedList

溶液

听起来你想要的是原始的广告订单索引位置,你必须镜像像 一个 ,保持它与更新同步,并用它来查找位置。创建一个子类,比如说,并在内部添加这个,并添加一个委托到内部的子类,这可能是最好的方法。KeySetArrayListHashMapHashMapIndexedHashMapArrayList.getKeyIndex(<K> key)ArrayList.indexOf()

这是做什么,但用镜像而不是.LinkedHashMapLinkedListKeySetArrayList


答案 2
int pos = new ArrayList<String>(info.keySet()).indexOf("jeremy")

推荐