java 怎样取出map的键_java – 如何使用其键在LinkedHashMap中获取键/值的位置

一般来说,HashMap实现是无序迭代的。

LinkedHashMap可以预测为迭代(插入顺序)排序,但不会暴露List接口和LinkedList(这是镜像密钥集插入顺序)也不会跟踪索引位置本身,因此找到索引非常有效好。 LinkedHashMap也不会公开对内部LinkedList的引用。

The actual “Linked List” behavior is implementation specific. Some

may actually use an instance of LinkedList some many just have

Entry track a previous and next Entry and use that as its

implementation. Don’t assume anything without looking at the source.

包含密钥的KeySet不能保证顺序,因为用于放置在继承的HashMap的后台数据结构中的散列算法。所以你不能使用它。

执行此操作的唯一方法是,无需编写自己的实现,就是使用使用镜像LinkedList的Iterator,并保持计数,这将大大降低数据集的效率。

听起来像你想要的是原始的插入顺序索引位置,你必须镜像KeySet中的键,像一个ArrayList,保持与HashMap的更新同步,并使用它来查找位置。创建HashMap的子类,例如IndexedHashMap,并在内部添加该ArrayList,并添加一个委托给内部ArrayList.exexOf()的.getKeyIndex(< K>键),这是最好的方式。

这是LinkedHashMap所做的,但是使用LinkedList镜像KeySet而不是ArrayList。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值