【发布时间】:2020-10-20 17:28:55
【问题描述】:
我正在用 Java 编写一个函数,可以简化如下:
StringBuilder s = new StringBuilder(50);
Queue<String> q = new LinkedList<>();
for(some condition){
s.setLength(0);
s.append("...").append("...").append("...").append("...");//add several strings to s
q.add(s.toString());
}
我将这些字符串保存在队列 q 中,如果队列的大小大于某个值,它会将 q 写入数据库。然而,它变得很慢,尤其是当循环次数很大(数百万)时。我认为这是因为连接需要大量时间。那么有没有更好的方法来进行连接?提前感谢您的帮助!
更新:
我想使用相同的 StringBuilder 来创建字符串,所以每次我使用 s.setLength(0) 在每个循环开始时重置它。这些字符串是新节点的信息,比如它的ID和一些属性,所以我需要通过调用一些函数来检索这些信息,并将它们附加到字符串s。其背后的想法是当队列达到特定大小时,我会从该队列中弹出信息以创建节点到 Neo4j 数据库,因为如果我为每个新节点使用一个事务会花费更多。
【问题讨论】:
-
为什么不只创建一次该字符串?它总是一样的。
-
因此,您将每个字符串推入队列,当达到某个队列大小时,您将队列中的所有元素附加到字符串生成器(连接到一个字符串)并将该值写入数据库?
-
如果您将实际代码粘贴到您要附加的那些字符串的来源处,这可能会有所帮助。还有为什么 s.setLength(0) 在循环开始时,也许你可以提前计算缓冲区的大小,避免在追加时重新计算
-
@akuzminykh 那是因为这些字符串是新节点及其属性的信息,我需要通过调用一些函数来一一获取这些信息。
-
同意@Gubatron - 使用足够大的(或仅链表)
标签: java string loops concatenation