当前位置: 首页 > 知识库问答 >
问题:

多系统之间的差异。出来print()和连接

曹季同
2023-03-14

基本上,我想知道哪种方法更适合练习,

for(int i = 0; i < 10000; i++){
    System.out.print("blah");
}
System.out.println("");

String over_9000_blahs = "";
for(int i = 0; i < 10000; i++){
    over_9000_blahs += "blah";
}
System.out.println(over_9000_blahs);

或者还有我不知道的更好的方法吗?

共有3个答案

谭彦
2023-03-14

按履约顺序:

>

  • StringBuilder——最快的。基本上,它只是将单词添加到一个字符数组中。当容量不足时,它会使容量倍增。应不超过日志(10000)次。

    系统。出来打印-与StringBuilder相比,它的性能很差,因为我们需要将锁定10000次。此外,print会创建新的char[writeBufferSize]10000次,而在StringBuilder选项中,我们只会创建一次!

    串联字符串。创建许多(后来也是大的)对象,启动一些内存管理将严重影响性能。

    编辑:

    更准确地说,因为问题是关于选项2和选项3之间的区别,而且很清楚为什么Stringbuilder很快。

    我们可以说,第二种方法中的每次迭代都需要K个时间,因为每次迭代的代码都是相同的,字符串的长度也是相同的。在执行结束时,第二个选项将花费10000*K时间进行10000次迭代。对于第三种方法,我们不能这样说,因为每次迭代字符串的长度都会增加。因此,分配对象和垃圾收集它们的时间越来越多。我想说的是,在第三个选项中,执行时间并不是线性增加的。因此,对于低迭代次数,我们可能看不到最后两种方法之间的差异。但是我们知道,开始一个特定的NumberOfIterations第二个选项总是比第三个好。

  • 田德运
    2023-03-14

    如果要在(较大的计数)循环中连接字符串,则需要使用StringBuilder

    for(int i = 0; i < 10000; i++){
        over_9000_blahs += "blah";
    }
    

    这样做是为了每个迭代:

    • 在内部创建一个新的StringBuilder,其内部char数组的大小足以容纳中间结果(over_9000_blahs

    这就是每次迭代两个越来越长的字符串的副本——这意味着二次时间复杂度。

    因为系统。出来println()可能是同步的,重复调用它可能会比使用StringBuilder慢(但我猜它不会比使用=在循环中连接字符串慢)。

    所以StringBuilder方法应该是三种方法中最好的。

    庄子平
    2023-03-14

    因为你只是在写系统。out第一种方法更好,但如果性能对您很重要,请使用下面的方法(System.out.println是同步的,并使用锁定-可以在此处和此处阅读更多信息)。

    如果您想稍后使用“大字符串”或提高性能,使用StringBuilder会更简洁。(见下文),编译器将任何大小写字符串转换为StringBuilder(此处有更多详细信息)

            StringBuilder stringBuilder = new StringBuilder();
            for(int i = 0; i < 10000; i++){
                stringBuilder.append("bla");
            }
            System.out.println(stringBuilder.toString());
    
     类似资料:
    • 我试图理解使用vs.。 似乎用于显示静态信息,而是从方法返回的值。然而,我看到了像下面这样的例子,其中函数在语句中使用 何时使用和

    • 本文向大家介绍数字和模拟系统之间的差异。,包括了数字和模拟系统之间的差异。的使用技巧和注意事项,需要的朋友参考一下 数字和模拟系统均用于将信号从一个地方传输到另一个地方,例如音频/视频。数字系统使用二进制格式(0和1),而模拟系统使用幅度变化的电子脉冲发送数据。 以下是数字系统和模拟系统之间的一些重要区别。 。 序号 键 数字系统 模拟系统 1个 信号类型 模拟系统使用大小变化的连续信号。 2 波

    • 本文向大家介绍FAT32,exFAT和NTFS文件系统之间的差异。,包括了FAT32,exFAT和NTFS文件系统之间的差异。的使用技巧和注意事项,需要的朋友参考一下 操作系统的文件系统提供了一种组织文件和管理驱动器的方法。它指定如何以文件和文件夹的形式存储数据,并提供有关文件的元数据,例如名称,权限,大小和其他属性。FAT32,exFAT和NTFS是Windows操作系统使用的文件系统。FAT3

    • 度量可以度量一些有用的领域,但是有什么区别和联系呢?

    • 问题内容: 很快就有两个相等运算符:double equals( )和Triple equals( ),两者之间有什么区别? 问题答案: 简而言之: 操作员检查其实例值是否相等, 操作员检查引用是否指向同一实例, 长答案: 类是引用类型,可能有多个常量和变量在幕后引用类的同一单个实例。类引用保留在运行时堆栈(RTS)中,其实例保留在内存的堆区域中。当您控制平等时, 这意味着它们的实例是否彼此相等。

    • 问题内容: 据我了解,python将输出输出,但显然并非总是如此。例如: 在ipython中: 在python中: ipython对输出应用什么转换? 问题答案: IPython使用代替方法或标准模块来打印输出。 模块提供了在后台使用的两个功能。 函数返回对象的字符串表示形式: 函数打印对象的表示形式: IPython使用其自己的漂亮打印机,因为标准Python模块“不允许开发人员提供自己的漂亮打