java - 如何减少 System.out.println() 所花费的时间;

标签 java performance io

我正在列表中插入 2_000_000 个长值。每次插入时,我都需要使用 SOP 将列表的大小打印到控制台。如果我不打印尺寸来控制台插入将在 250 毫秒内完成。如果我每次插入值时都打印大小,则花费的时间为 25000 毫秒。

知道如何解决这个性能问题吗?

我正在使用 Java7 和 Eclipse (kepler) 来测试我的实现。

注意:每次插入长值时打印大小是问题定义所必需的和强制的。

最佳答案

尝试使用 BufferedWriter 。它允许高效的字符书写。 另外,别忘了调用 flush方法放在最后,以便输出所有缓冲的数据。

工作示例:

    List<Long> list = new ArrayList<>();
    try (BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out))) {
        for(long i = 0; i < 2000000; i++) {
            list.add(i);
            bw.write("Current size:" + list.size());
            bw.newLine();
            if(i % 100 == 0 || i == 1999999) {
                bw.flush();
            }
        }
    } catch (IOException e) {
        e.printStackTrace();
    }

第二个选项可以使用 StringBuilder .

    List<Long> list = new ArrayList<>();
    String separator = System.getProperty("line.separator");
    int initialCapacity = 200000;
    StringBuilder sb = new StringBuilder(initialCapacity);
    for (long i = 0; i < 2000000; i++) {
        list.add(i);
        sb.append("Current size:").append(list.size()).append(separator);
        if (i % 10000 == 0 || i == 1999999) {
            System.out.println(sb);
            sb = new StringBuilder(initialCapacity);
        }
    }

关于java - 如何减少 System.out.println() 所花费的时间;,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41721059/

相关文章:

c++ - 为什么这段代码不断打印换行符?

java - ItemListener 与 ChangeListener 与 ActionListener

java - 并发HashMap线程安全和happens-before关系

Linux 环境下的 Java JNA

java - 在 Ant 中读取属性值

performance - 正确处理 ISO-Prolog 中的非正规 float

c++ - 如何从 C++ 读取 .spc 文件?

javascript - 使用地理定位 API 计算我的速度 javascript

CSS 删除未使用的样式

python - 读取元组并将其写入文件(numpy.random.RandomState.get_state)