ArrayList 或 Map of Distinct Keys,更快?

ArrayList or Map of Distinct Keys, Faster?

示例:-

列表 A 包含 N 个对象。
列表 B 包含 M 个对象。

列表 A 中的一个对象将仅匹配列表 B 中的一个对象。 匹配条件是我定义的,假设是Item No, From Date and Area Code。如果这些值匹配,那么我会将所有其他值从列表 B 的对象复制到列表 A 的对象。

解决方法:-有两种解决方法,哪个更好或者更快?

Sol 1:-只需执行一个for循环来匹配列表A中列表B的对象。

太阳 2:-
第 1 步:- 从列表 B 创建一个 HashMap
第 2 步:- 使用该映射获取列表 A 中的匹配记录和设置值。 如果我创建一个地图,那么每个对象的键都会不同。 假设如果列表 B 有 1000 个对象,那么如果我想创建 HashMap,将有 1000 个不同的键。

第一个解决方案的复杂度为 O(N*M)。

第二个O(N) + O(M),但消耗更多内存。

第二种算法更快。

你的第二个解决方案更有效。

解决方案 1 需要对 n 个对象(列表 A)进行循环,对 m 个对象(列表 B)进行内部循环。因此,这是 O(n*m) 或更准确地说 O(n^2)

解决方案 2 需要设置时间(构建 Map),即 O(m) 然后扫描列表 A(并且列表 B 中的查找成本为零,因为 HashMap 查找是 O(1)。因此,这是 O(m)+O(n),相当于 O(n)。这是 好得多 的解决方案。

存在一种极端情况,其中 mn - 在这种情况下,设置时间和内存成本可能会很大。

让我回顾一下:

  • A(短?)列表 A
  • 一长串B
  • 列表 A 中有一项可能在某些条件上与 B 中的条目匹配
  • 找到 B 条目后,将 B 中的所有其他条目复制到 A。
  • 问题:B 上的地图(索引的标准键)有帮助吗?

您可以从 A 的条件创建一个 HashSet,然后遍历 B 直到第一个匹配项。

应该也可以,要快点

但是,确实应该使用 Map/Set。可能取决于 N << M.