我想使用最快的方法将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();
}
}
答案 0 :(得分:0)
您可能需要使用其他结构
可能是HashMap
或HashSet
使用List没有更快的方法
在列表中搜索是O(N)。
答案 1 :(得分:0)
如果你只想要一个或零个匹配,你可以在某些情况下通过在找到匹配后使用break keyword停止循环来提高代码的速度。
另外,您可以考虑更改您的ID字段以包含比字符串更快比较的数值。
因为您必须在List中的每个对象上调用一个方法才能进行比较,所以没有其他办法可以加快速度