gpt4 book ai didi

java - Java代码性能改进建议

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:15:36 25 4
gpt4 key购买 nike

你好,我这样做只是为了好玩,我想弄清楚是否有更有效/更快的方法来做到这一点。对给定的数字和字母列表进行所有可能的组合,然后将它们打印到文本文件中。我目前有这个,正在寻找建议。

import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;

public class combos {

public static void main(String[] args){

char[] alphabet = new char[] {'0','1','2','3','4','a','b','c','d','e'};

StringExcersise.possibleStrings(5, alphabet,"");
}
} class StringExcersise {
public static void possibleStrings(int maxLength, char[] alphabet, String curr){

if(curr.length() == maxLength) {
try (PrintWriter out = new PrintWriter(new FileWriter("./Combos.txt", true))) {
out.println(curr);
}catch (IOException e) {
System.err.println(e);}

} else {
for(int i = 0; i < alphabet.length; i++) {
String oldCurr = curr;
curr += alphabet[i];
possibleStrings(maxLength,alphabet,curr);
curr = oldCurr;
}
}
}
}

目前我需要大约 26 秒才能运行。

最佳答案

最大的性能瓶颈是IO。每次打开/关闭文件时,它的开销都非常大。我建议你只打开它一个。此外,您不需要先创建一个集合,因为随着集合的增长,这会变得很昂贵,只需在计算结果时将结果写入缓冲文件即可。

通过构建 char[] 而不是 String 并打印 char[],您可以获得相对较小的改进。

class StringExercise {
static void possibleStrings(char[] alphabet, PrintWriter pw, char[] curr, int index) {
if (index == curr.length) {
pw.println(curr);
return;
}
for (char c : alphabet) {
curr[index] = c;
possibleStrings(alphabet, pw, curr, index + 1);
}
}
}

public class Combos {
public static void main(String[] args) throws FileNotFoundException {
long start = System.currentTimeMillis();
try (PrintWriter pw = new PrintWriter("combos.txt")) {
StringExercise.possibleStrings("01234abcde".toCharArray(), pw, new char[5], 0);
}
System.out.printf("Took %.3f seconds to run%n", (System.currentTimeMillis()-start)/1e3);
}
}

打印

Took 0.030 seconds to run

我检查过它生成了预期的输出。

关于java - Java代码性能改进建议,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41519489/

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