gpt4 book ai didi

java - 生成所有可能的 6 长度字符串并写入文件的最快方法是什么?

转载 作者:行者123 更新时间:2023-11-30 06:53:55 24 4
gpt4 key购买 nike

我想生成所有可能的 6 长度字符串我需要这种格式:aaa000aaa001...

这是我的代码:

private List<String> licensePlateList = new ArrayList<>();
private List<String> numberList = new ArrayList<>();
private List<String> letterList = new ArrayList<>();

public static void main(String[] args) {
Main app = new Main();
long start = System.nanoTime();

app.generateNumbers();
int letters = 26;
int count = 3;
final int combinations = (int) Math.pow(letters, count);
StringBuilder sb = new StringBuilder(count);
for (int i = 0; i < combinations; i++) {
sb.setLength(0);
for (int j = 0, i2 = i; j < count; j++, i2 /= letters)
sb.insert(0, (char) ('a' + i2 % letters));
app.letterList.add(sb.toString());
}

long time = System.nanoTime() - start;
System.out.printf("Took %.3f seconds to generate", time / 1e9);

for (int i=0;i<app.letterList.size();i++){
for (int j=0;j<app.numberList.size();j++){
String licensePlate = app.letterList.get(i)+app.numberList.get(j);
try(FileWriter fw = new FileWriter("licensePlate2.txt", true);
BufferedWriter bw = new BufferedWriter(fw);
PrintWriter out = new PrintWriter(bw))
{
out.println(licensePlate);
} catch (IOException e) {
e.printStackTrace();
}
}
}

time = System.nanoTime() - start;
System.out.printf("Took %.3f seconds to generate %,d combinations%n", time / 1e9, app.licensePlateList.size());
}

private void generateNumbers(){
for (int i=0;i<1000;i++){
numberList.add(String.format("%03d", i));
}
}
}

我在 generateNumbers() 方法中生成所有可能的数字。在生成数字后的 main() 方法中,我将所有可能的 3 长度字符串生成到 letterList 中。在我用数字映射每个字符串并写入文件后。

但是真的很慢。你知道更快的方法吗?

最佳答案

您的算法正在为每个车牌打开一个新的写入器。

相反,打开一个 writer 并将它们全部写入:

try(FileWriter fw = new FileWriter("licensePlate2.txt", true);
BufferedWriter bw = new BufferedWriter(fw);
PrintWriter out = new PrintWriter(bw)) {
for (String letters : app.letterList) {
for (String numbers : app.numberList) {
out.print(letters);
out.println(numbers);
}
}
} catch (IOException e) {
e.printStackTrace();
}

请注意此代码如何通过单独编写每个字符串来避免为整个许可证号创建中间字符串。

另请注意“for each”循环的使用。

关于java - 生成所有可能的 6 长度字符串并写入文件的最快方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36922711/

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