示例: -
列表A包含N个对象 列表B包含M个对象。
列表A中的一个对象只匹配列表B中的一个对象。 匹配标准由我定义,假设它是项目号,来自日期和区号。如果这些值匹配,那么我将列表B的对象中的所有其他值复制到列表A的对象。
解决方案: - 有两个解决方案,一个更好还是更快?
Sol 1: - 只需执行for循环即可匹配列表A中列表B的对象。
Sol 2: -
第1步:创建HashMap<字符串,对象>来自清单B.
步骤2: - 使用该地图获取匹配记录并设置列表A中的值。
如果我创建一个地图,那么每个对象的键都是不同的。
假设如果列表B有1000个对象,那么如果我想创建HashMap,则会有1000个不同的密钥。
答案 0 :(得分:1)
您的第二个解决方案更有效率。
解决方案1需要在n
个对象(列表A)上循环,并且内部循环超过m
个对象(列表B)。因此,O(n*m)
或更准确O(n^2)
。
解决方案2需要设置时间(构建Map
),这是O(m)
,然后是列表A的一次扫描(列表B中的查找零成本,因为HashMap
查找是{ {1}}。因此O(1)
相当于O(m)+O(n)
。这是更好的解决方案。
有一个边缘情况,O(n)
远大于m
- 在这种情况下,设置时间和内存成本可能很高。
答案 1 :(得分:0)
第一种解决方案具有复杂度O(N * M)。
第二个O(N)+ O(M),但消耗更多内存。
第二种算法更快。
答案 2 :(得分:0)
让我回顾一下:
你可以从A制作一个标准的HashSet,然后一直走到B,直到第一场比赛。
那也应该没问题,也要快。
但是,肯定应该使用Map / Set。可能取决于N<<微米。