java - 散列和索引列表或数组?

标签 java vector hashmap

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/

相关文章:

java - 用鼠标在矩形区域内绘制多边形时检测交点

java 。从 BufferedInputStream 读取并写入 FileOutputStream

hashmap - 使用入口模式时如何改变 HashMap 的其他元素?

Java - .putAll( t ) 放入 HashMap 中也会将 t 放入另一个 HashMap 中

java - 创建 session 时 hibernate 错误

Java ResultSet 获取返回的字段名称

algorithm - remove_if 不起作用,不确定是什么问题

c++ - 如何将 Eigen::eigenvector().col(0).real() 转换为 std vector ?

c++ - 根据一个 vector 对多个 vector 进行排序

java - 如何从 Java 中的 HashMap 中选择一个随机键?