Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/374.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Java中查找列表中字符串的最快方法_Java - Fatal编程技术网

在Java中查找列表中字符串的最快方法

在Java中查找列表中字符串的最快方法,java,Java,我想使用最快的方法将字符串与列表中的字符串进行匹配 我正在通过列表进行迭代,以匹配productname并设置该产品的价格 我试图在另一个列表中按名称匹配每40万件商品,在那里我可以找到价格,该列表也包含40万件商品 对字符串执行“contains()”以匹配400000个项目400000次需要很长时间才能完成。 我也尝试过startsWith(),因为我不按子字符串搜索,我使用字符串,因为第二个列表中肯定有完全匹配。 它必须是一种更快的方法,在内部for循环中找到匹配项才能获得价格 Produ

我想使用最快的方法将字符串与列表中的字符串进行匹配

我正在通过列表进行迭代,以匹配productname并设置该产品的价格

我试图在另一个列表中按名称匹配每40万件商品,在那里我可以找到价格,该列表也包含40万件商品

对字符串执行“contains()”以匹配400000个项目400000次需要很长时间才能完成。 我也尝试过startsWith(),因为我不按子字符串搜索,我使用字符串,因为第二个列表中肯定有完全匹配。 它必须是一种更快的方法,在内部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();
        }

    }
ProductData t=null;
对于(inti=0;i
您可能需要使用另一种结构。
可能是
HashMap
HashSet

没有比使用列表更快的方法了。

在列表中搜索为O(N)。

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

也可以考虑更改ID字段以包含比字符串更快的数值,


因为为了进行比较,您必须对列表中的每个对象调用一个方法,所以最终您无法做太多其他事情来加快速度,这意味着您正在实现
包含
方法。使用不同的方法,并测试它是否比
字符串#包含
更快。您应该搜索关键字preproc>essing和Hashmap,这可能会对您有很大帮助。您了解复杂性的顺序吗?您试图做的是n^2次或n*m次。也许更好地组织数据是一个更好的解决方案。
getpairID()
返回什么?一个
String
,或者其他什么?getpairID()返回一个带有产品名称的字符串。在这种情况下使用
Map
没有帮助,因为要查找的字符串可能是集合中字符串的子字符串。实际上,在这种情况下,我按列表中的整个字符串进行搜索,没有子字符串。你认为Map有帮助吗?是的,当然。在HashMap中搜索理论上是O(1)不管HashMap的大小是多少。我绝对应该中断;我怎么会错过它!:)在最好的情况下,这可以让它完成得更快。可能会有一半的时间。我会试试这个。我无法更改字段,我从其他系统获得这些值。在这种情况下,break关键字使它完成所需时间缩短了49%:)请看一看示例说明如何使用if语句中的一个break语句中断两个循环。如果之前没有这样做,可能会更快