Java中是否有任何类可以按顺序保存元素数组并针对快速搜索进行了优化?
即我需要通过数字索引(如 in Vector
)和哈希(如 in HashMap
)来检索元素。
LinkedHashMap 不匹配
我认为LinkedHashMap
不匹配,因为它保证了顺序,但不允许通过索引(位置编号)快速访问。根据描述,需要遍历整个链才能找到给定的位置。这就是Collection
迭代器所能做到的。
编辑 2
即按键和索引搜索都应该很快,而不仅仅是按键。
我想你可以试试LinkedHashSet。
您可以使用 aMap
通过哈希快速检索元素。根据定义, aMap
是无序的,谈论索引没有多大意义。使用LinkedHashMap可能有用,因为它保证在迭代时保留插入顺序,尽管按索引访问元素仍需要一些额外的处理,如下所示:
map.entrySet().toArray()[index] // mind the casts, etc.
如果您的地图不经常更改,如果您缓存数组并在按索引访问条目之前检查地图的大小是否已更改,则上述方法将很好地工作,仅当检测到大小更改时才创建新数组。另一方面,如果映射频繁更改,您需要在每次访问时重新创建数组,从而创建性能不佳的数据结构。
使用LinkedHashMap。这将允许您通过 key 检索元素。您还可以按照存储在其中的相同顺序检索元素。
我认为您正在寻找LinkedHashMap
从文档:
Map 接口的哈希表和链表实现,具有可预测的迭代顺序。此实现与 HashMap 的不同之处在于它维护一个双向链表,该列表贯穿其所有条目。这个链表定义了迭代顺序,通常是键插入映射的顺序(插入顺序)。请注意,如果将键重新插入到地图中,则插入顺序不会受到影响。(如果在调用 m.containsKey(k) 将在调用之前立即返回 true 时调用 m.put(k, v),则将键 k 重新插入到映射 m 中。)