This question already has answers here:
Check if one list contains element from the other
(11个答案)
3年前关闭。
我有以下数组列表
现在,我需要比较这两个数组,并检查empIds中是否有id中的任何值。如果是,我需要使用布尔值true退出。我已经通过以下方式做到了。
但这需要很多时间。有人可以帮我优化这个吗?
每次调用
(11个答案)
3年前关闭。
我有以下数组列表
List<Long> ids = new ArrayList<Long>();
List<Long> empIds = new ArrayList<Long>();
现在,我需要比较这两个数组,并检查empIds中是否有id中的任何值。如果是,我需要使用布尔值true退出。我已经通过以下方式做到了。
for (Long id : ids) {
if (empIds.contains(id)) {
checker = true;
break;
}
}
但这需要很多时间。有人可以帮我优化这个吗?
最佳答案
您可以将empIds
放在HashSet
中以缩短搜索时间:
Set<Long> empIdsSet = new HashSet<Long>(empIds);
for (Long id : ids) {
if (empIdsSet.contains(id)) {
checker = true;
break;
}
}
每次调用
empIdsSet.contains(id)
将花费预期的恒定时间(O(1)
),这比每次调用empIds.contains(id)
所需的线性时间要好。10-08 14:36