1 回答
TA贡献2011条经验 获得超2个赞
是的,对于大量的人来说,aHashMap是有益的。
您的初始算法将花费很长时间,在嵌套的 for 循环中遍历两个列表。这是一个 O(n 2 ) 算法。A即使假设和中各有 1000 个项目,并假设比较两个单独的项目(一个来自和一个来自)B的成本为 1 ,您也会看到 500k 次比较(避免比较每个项目两次)。经常这样做会导致性能下降。AB
假设你有一个很好的对象哈希码算法,从 a 中查找一个值HashMap是 O(1) 访问。您仍然会花费 O(n) 时间来构建它,但如果您有大量项目,那与 O(n 2 ) 相比就不算什么了。
使用来自“B”的数据构建HashMap一次“C”并多次使用它,只要B的信息没有改变。如果您“需要经常这样做”,那么性能会更好,因为HashMap它已经构建好了——只需重用它。
如果需要维护顺序,将B列表索引作为值存储在哈希映射中。
您不需要“将该临时哈希图转换回数组列表”,因为创建HashMap“C”不会破坏原始列表“B”。要注意的一件事是,如果列表中的对象B发生变化,则强制更新以HashMap保持一致。另一件需要注意的事情是你对非常大的列表的内存使用——你能把对象、列表和散列图保存在内存中吗?
你的伪代码:
for each index in B:
get object b
put in hash map C values (b, index)
for each a in A:
if found in hash map C: do something with found object
对于较小的数字,O(n 2 ) 性能时间将足够小,以至于HashMap不值得构建它。这是您需要做出的决定——您需要决定何时列表足够大,以至于构建HashMap和使用它值得HashMap构建成本。
添加回答
举报