This question already has answers here:
Check if one list contains element from the other
                                
                                    (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