【发布时间】:2011-04-20 04:06:05
【问题描述】:
我有 2 个具有相同对象类型的列表。
List A [ foo, bar, moo, woo, pee ]
List B [ bar, woo ]
我想比较这两个列表,如果名称匹配, 将其属性设置为 true。
例如,
if(ListA[1].name.equals(ListB[0].name)) { //match name 'bar' and 'bar'
ListA[1].hasSameName = true;
}
类似的东西。
我可以写出 O(N^2) 的解。
for(Talent checkedTalent : ListA) {
for(Talent filteredTalent : ListB) {
if( checkedTalent.Id.equals(filteredTalent.Id) ) {
filteredTalent.isSelected = true;
}
}
}
这可以更有效地完成吗?
【问题讨论】:
-
快速但愚蠢:排序和比较。
-
订单重要吗?会有骗子吗?因为在这些情况下,琐碎的事情甚至可能不是真的。如果没关系并且没有欺骗,我建议使用 Set 而不是 List。
-
@amit:不会有重复的值,顺序无关紧要。
-
然后我投票支持建议的哈希解决方案,但我仍然认为(至少为了可读性)使用 Set 比 List 更合适(除非它是关键的性能问题并且不能采取插入开销)
-
@amit:我也同意,使用 Set 似乎更好。