嗨,我想问你们有没有办法优化这个:也许图书馆方法可以提供帮助?
for (int i = 0; i < ids.size(); i++){
for (int j = 0; j < obj.size(); j++){
if (ids.get(i).equals(obj.get(j).getChatId())){
// ...
}
}
}
答案 0 :(得分:1)
由于您的嵌套循环,您的代码在 O(n * m)时间内运行。
要改善这一点,请先将ids
集合转换为Set
。
Set<IdType> idSet = new HashSet<>(ids);
for (ObjType o : obj) {
if (idSet.contains(o.getChatId())) {
// ...
}
}
由于add()
是 O(1),因此设置构造为 O(n),并且contains()
也是 O(1),这意味着新代码的性能是 O(n + m)。