Java 中是否有任何类可以按顺序保存元素数组并针对快速搜索进行优化?
即我需要通过数字索引(如 Vector
)和散列(如 HashMap
)检索元素。
LinkedHashMap 不匹配
我认为 LinkedHashMap
不匹配,因为它保证顺序,但不允许通过索引(位置编号)快速访问。根据描述,需要遍历整个链才能找到给定的位置。这是任何 Collection
都可以用迭代器实现的。
编辑 2
即按键搜索和索引搜索都应该很快,而不仅仅是按键搜索。
最佳答案
您可以使用 Map
通过散列快速检索元素。根据定义,Map
是无序的,谈论索引没有多大意义。使用 LinkedHashMap可能有用,因为它保证在迭代时保留插入顺序,尽管按索引访问元素仍需要一些额外的处理,如下所示:
map.entrySet().toArray()[index] // mind the casts, etc.
如果您的 map 不经常更改,如果您缓存数组并在按索引访问条目之前检查 map 的大小是否已更改,则上述方法会很好地工作,仅当大小发生更改时才创建新数组检测到。另一方面,如果映射频繁更改,您需要在每次访问时重新创建数组,从而创建性能不佳的数据结构。
关于java - 散列和索引列表或数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10716992/