我正在研究 Java 集合性能特征、Big O 表示法和复杂性等。有一个真实的部分我无法理解,这就是为什么 HashMap 和其他哈希容器被认为是 O(1),这应该意味着在 1,000 个条目表中通过键查找条目的时间应该与 1,000,000 个条目表的时间大致相同。
假设您有 HashMap myHashMap,存储有名字 + 姓氏的键。如果调用 myHashMap.get("FredFlinstone"),它如何能立即找到 Fred Flinstone 的 Person 对象?它怎么可能不必遍历存储在 HashMap 中的一组键来找到指向对象的指针?如果 HashMap 中有 1,000,000 个条目,则键列表也将是 1,000,000 长(假设没有冲突),即使它已排序,它也必须比 1.000 的列表花费更多的时间。那么 get() 或 containsKey() 时间如何不随 n 而变化呢?
注意:我认为我的问题会在Is a Java hashmap really O(1) 中得到回答?但答案并没有真正解决这一点。我的问题也与碰撞无关。