gpt4 book ai didi

java - java中根据参数连接多个字符串

转载 作者:行者123 更新时间:2023-12-01 13:08:22 25 4
gpt4 key购买 nike

我想在递归函数中写入java中的控制台树,参数之一是树的深度,我想将它用于节点名称之前的制表符数量。

public void print(TreeNode node, int depth)
//something ...
String prefix = "";
for(int i = 0; i <depth; i++) {
prefix += "\t";
}

//....
List<TreeNode> subnodes = node.getNodes();
for(int i = 0; i < subnodes.size(); i++) {
System.out.println(prefix+ subnodes.get(i).getTitle()); //title is name of node;
}
}

对于前缀的字符串连接,还有比 for 更好的解决方案吗?
例如,如果 2 = 深度,我想做 2x“\t”,这意味着“\t\t”。如果深度是可变的,我想做深度 x "\t";我的解决方案是用于但是对于这个简单的事情还有更好的吗?

最佳答案

您可能需要更改程序才能使用 StringBuilder 类:

StringBuilder prefix = new StringBuilder();
for (int i = 0; i < depth, ++i) {
prefix.append("\t");
}

....

System.out.println(prefix.toString() + subnodes.get(i).getTitle());
Java 中的

String 是不可变的,这就是为什么当您修改它时,实际上会创建 String 的新副本。如果您的树确实又大又深(或高:) - StringBuilder 应该工作得更快并且消耗更少的内存。

如果 for 循环出现问题,您可以考虑存储深度图 -> 预先计算的前缀等解决方案,如下所示:

Map<Integer, String> prefixes = new HashMap<Integer, String>();

private void fillPrefixes(int maxTreeDepth) {
StringBuilder prefix = new StringBuilder();

for (int i = 0; i < maxTreeDepth; ++i) {
prefixes.put(i, prefix.toString());
prefix.append("\t");
}
}

当您真正重新计算该前缀超过 9000 次时,这对于巨大的树的情况可能很有用。从技术上讲,for 循环仍然存在,但您不必在每次需要时重新计算前缀。硬币的另一面是内存消耗增加。因此,要做出正确的决定,您需要避免过早的优化,并且仅在真正需要时才进行优化,并决定哪个更关键 - 内存或执行时间。

关于java - java中根据参数连接多个字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23093859/

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