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)
。这是 好得多 的解决方案。
存在一种极端情况,其中 m
比 n
多 - 在这种情况下,设置时间和内存成本可能会很大。
让我回顾一下:
- A(短?)列表 A
- 一长串B
- 列表 A 中有一项可能在某些条件上与 B 中的条目匹配
- 找到 B 条目后,将 B 中的所有其他条目复制到 A。
- 问题:B 上的地图(索引的标准键)有帮助吗?
您可以从 A 的条件创建一个 HashSet,然后遍历 B 直到第一个匹配项。
应该也可以,要快点
但是,确实应该使用 Map/Set。可能取决于 N << M.
示例:-
列表 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)
。这是 好得多 的解决方案。
存在一种极端情况,其中 m
比 n
多 - 在这种情况下,设置时间和内存成本可能会很大。
让我回顾一下:
- A(短?)列表 A
- 一长串B
- 列表 A 中有一项可能在某些条件上与 B 中的条目匹配
- 找到 B 条目后,将 B 中的所有其他条目复制到 A。
- 问题:B 上的地图(索引的标准键)有帮助吗?
您可以从 A 的条件创建一个 HashSet,然后遍历 B 直到第一个匹配项。
应该也可以,要快点
但是,确实应该使用 Map/Set。可能取决于 N << M.