在Java中查找List中String的最快方法

时间:2014-03-04 21:25:42

标签: java

我想使用最快的方法将String与List中的String匹配。

我通过列表迭代以匹配该产品的产品名称和设定价格。

我试图在另一个列表中按名称匹配每40万个项目,在那里我可以找到价格,该列表还包含40万个项目。

在String上执行“contains()”以匹配400 000个项目400 000次需要很长时间才能完成。 我也尝试使用startsWith(),因为我不通过子串搜索,我使用String,因为在第二个列表中肯定有完全匹配。 它必须是在内部for循环中找到匹配以获得价格的更快的方法吗?

ProductData t = null;
for (int i = 0; i < ParseCSV.products.size(); i++) {  // List of 400K+ items
        t = ParseCSV.products.get(i);

        for (int j = 0; j < ParseCSVprice.productPrice.size(); j++) {  // another List of 400K+ items
        if (ParseCSVprice.productPrice.get(i).getpairID()
                .contains(t.pairID)) {

            t.price = ParseCSVprice.productPrice.get(i).getPrice();
        }

    }

2 个答案:

答案 0 :(得分:0)

您可能需要使用其他结构 可能是HashMapHashSet 使用List没有更快的方法 在列表中搜索是O(N)。

答案 1 :(得分:0)

如果你只想要一个或零个匹配,你可以在某些情况下通过在找到匹配后使用break keyword停止循环来提高代码的速度。

另外,您可以考虑更改您的ID字段以包含比字符串更快比较的数值。

因为您必须在List中的每个对象上调用一个方法才能进行比较,所以没有其他办法可以加快速度