java - 为什么LinkedHashMap不提供索引访问?

标签 java linkedhashmap

来自 Javadoc:
Map 接口(interface)的哈希表和链表实现,具有可预测的迭代顺序。此实现与 HashMap 的不同之处在于,它维护一个贯穿其所有条目的双向链表。

如果是这样,那么为什么它不提供像java中的List那样的对象访问, 列表.get(索引);

更新

我使用 LinkedHashMap 实现了 LRU 缓存。我的算法要求我从缓存中访问 LRU 对象。这就是为什么我需要随机访问,但我认为这会降低我的性能,所以我改变了逻辑,我在缓存已满时访问 LRU 对象...使用removeEldestEntry()

谢谢大家...

最佳答案

a) 因为条目是链接的,不能随机访问。如果我没有出错的话,性能会很糟糕,O(N)

b) 因为没有接口(interface)来支持此功能。因此,选择要么为此(性能不佳)实现引入专用接口(interface),要么要求客户端针对实现类而不是接口(interface)进行编程

<小时/>

顺便说一句,Guava有一个简单的解决方案适合您:

Iterables.get(map.values(), offset);

对于缓存,请查看 Guava 的 MapMaker还有过期功能。

关于java - 为什么LinkedHashMap不提供索引访问?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59227935/

相关文章:

java - do-while 来回答是或否? java

java - 在 Java swing 中获取组合框值

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

java - LinkedHashMap 的缺点?

java - 如何减少 hibernate 集合的索引大小(使用复合元素设置)?

java - 将 Hibernate 与 OSGi 和 Maven 结合使用

java - 如何找到该学生数组中所有学生的最高、最低和总平均数

java - 从 LinkedHashMap 转换为 Json 字符串

Java统计字符串出现次数并逆序排序

java - 使用 java 根据 LinkedHashMap 中的键与另一个 LinkedHashMap 进行值比较