java - 比较两个数组列表

标签 java arrays

<分区>

我有以下数组列表

List<Long> ids = new ArrayList<Long>();
List<Long> empIds = new ArrayList<Long>();

现在我需要比较这两个数组并检查 ids 中的任何值是否存在于 empIds 中。如果是,我需要以 boolean 值 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)

关于java - 比较两个数组列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38090886/

相关文章:

javascript - jQuery JSON 结果中的 ForEach 数组值

java - com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException : and executeUpdate won't work

java - TimestampType 设置覆盖错误

java - 如果两个线程正在等待进入一个同步方法,当互斥量被释放时,它们是否按照它们到达的顺序执行?

java - 为什么相机在 Android 5 中无法使用?

java - 不安全操作、未经检查的转换

c# - 数组的反序列化总是给出一个空数组

java - 如何断言数组的 Java Hashmap?

c++ - 如何用范围内的随机值填充数组? (重复是可以的。)

javascript - 在 typescript 中解析JSON数组