gpt4 book ai didi

java - Java 中的字符串连接速度

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:31:11 26 4
gpt4 key购买 nike

我正在快速制作一个 SQL 查询的原型(prototype),而不是按照正确的方式进行,我只是决定用一堆字符串连接来猛击它,一直认为这会非常慢,但事实并非如此很重要,因为我只是在测试查询。令我惊讶的是,Java 说这段代码需要 0 毫秒才能完成?使用 + 而不是 StringBuilder 或类似工具不会花费更多时间吗?

long t = System.currentTimeMillis();
String load = "";
for (String s : loadFields)
load += s + ", ";

String sql = "SELECT ";
sql += load + "sum(relevance) AS 'score' " +
"FROM ( ";

for (int i = 0; i < searchFields.length; i++) {
sql += "SELECT ";
sql += load;
sql += rels[i] + " AS relevance FROM articles WHERE " +
searchFields[i];

sql += " LIKE '%" + terms[0] + "%' ";
for (int z = 1; z < terms.length; z++)
sql += "AND " + searchFields[i] + " LIKE '%" + terms[z] + "%' ";

if (i != searchFields.length - 1) sql += " UNION ALL ";
}

sql += ") results GROUP BY " + load.substring(0, load.length() - 2) + " ";
sql += "ORDER BY score desc, date desc";
System.out.println("Build Time: " + (System.currentTimeMillis() - t) + " ms");

是的,这很丑陋,但重点不是解释 SQL,而是告诉我为什么这么快。

构建时间:0 毫秒

编辑:我用 20 个术语运行了 10000 次测试,耗时大约 10 秒,也就是大约 1/10 毫秒。现在我想起来了,很明显这对计算来说并没有那么多,除非我开始得到非常长的字符串。

最佳答案

您只进行了 29 次串联 - 我希望这花费的时间少于一毫秒。

如果您想针对 StringBuilder 实现测试此代码,您应该将其迭代 10,000 次左右(并进行适当的 JVM 预热)。

基准

我很好奇这种情况下的确切区别是什么,所以我将您的代码转换为使用 .concat()StringBuilder 并以 10,000 次迭代为基准( 2,000 warmup), 有5个字段和20个术语,它们都随机生成了32个字符串。

结果(以毫秒为单位):

   plus: 19656 (0.5/ms)
concat: 5656 (1.77/ms)
builder: 578 (17.3/ms)

关于java - Java 中的字符串连接速度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6287961/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com