java - 从列表中遍历并查找对象字段的最佳方法

标签 java list equals

我有一个自定义对象列表,我想通过给定的 Id(自定义对象中的字段)查找对象。我正在为此编码,所以在比较字段时我找到了两个解决方案。

1

private Product getProduct(String productId,List<Product> productList){
        for (int i = 0; i < productList.size(); i++) {
            if (productId.equals(productList.get(i).getId())) {
                return productList.get(i);
            }


        }
        return null;
    }

2.

 private Product getProduct(String productId,List<Product> productList){
        for (int i = 0; i < productList.size(); i++) {
            if (productList.get(i).getId().equals(productId)) {
                return productList.get(i);
            }
        }
        return null;
    }

区别在于 if 条件,我想知道哪一种比另一种更好,为什么,何时使用第一种方法,何时使用第二种方法?

最佳答案

equals()required根据 Java 的定义,它们是对称的,两个片段之间没有区别。

两个片段都不是最优的,因为它们通过数字索引进行迭代,并检索 productList.get(i)返回前两次。按索引迭代特别危险,因为传递 LinkedList<Product>会大大减慢您的搜索速度。

更好的方法是使用 for-each 形式的循环:

for (Product p : productList) {
    if (p.getId().equals(productId)) {
        return p;
    }
}
return null;

关于java - 从列表中遍历并查找对象字段的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40174624/

相关文章:

java - 内在函数和内联对 Lambda 性能的影响?

java - Hibernate注释@OnetoOne似乎并没有限制数据库中的多对一条目

python - 如何检查一个列表中的所有项目是否都在 python 的第二个列表中?

python - 使用 .index ("")作为 python 中的嵌套列表

Java:如果我覆盖 .equals 方法,我仍然可以使用 == 测试引用相等性吗?

Java 未经检查的转换

java - 在jframe上添加webview引擎控制

从列表中删除带有字符(0)的空元素

java - Apache的反射(reflection)等于将父子视为平等

c# - 带有自定义类键的慢字典