【问题标题】:In Java, how to append a string more efficiently? [duplicate]在 Java 中,如何更有效地附加字符串? [复制]
【发布时间】:2012-10-05 16:22:48
【问题描述】:

我写了一个Java程序,我需要在其中附加一个字符串

" u13a2" 到现有的"u1234 u12de u1386 ... u15a3"

因此,字符串逐渐变得越来越长。我发现每次追加所花费的时间也变得越来越长。有什么办法可以在一定程度上改善这一点?

我想到的实现包括:

unicodeArray += " "+unicode;

unicodeArray = unicodeArray.concat(" "+unicode);

他们的表现相似。我认为导致这些不良性能的主要原因是特殊类型String。它为每个分配创建一个新对象。如果你也这么认为,是不是意味着我最好使用另一种类型,比如字节数组?

【问题讨论】:

标签: java arrays string


【解决方案1】:

您应该使用StringBuilder 类。

StringBuilder stringBuilder = new StringBuilder();

stringBuilder.append("Some text");
stringBuilder.append("Some text");
stringBuilder.append("Some text");

String finalString = stringBuilder.toString();

另外,请访问:

【讨论】:

    【解决方案2】:

    使用StringBuilder 类。它在您尝试做的事情上更有效率。

    【讨论】:

      【解决方案3】:

      您可以为此使用StringBufferStringBuilder。两者都用于动态字符串操作。 StringBuffer 是线程安全的,而 StringBuilder 不是。

      在多线程环境中使用StringBuffer。但是如果是单线程的,推荐StringBuilder,比StringBuffer快很多。

      【讨论】:

      • StringBuffer 也是线程安全的。见docs.oracle.com/javase/1.5.0/docs/api/java/lang/…
      • 事实是这样:StringBuilder 不是线程安全的,而 StringBuffer 是。
      • 但是谁在并发线程中操作单个 CharSequence?我相信StringBuffer的线程安全没有用处。
      • 一切看需求。
      【解决方案4】:

      - 每次您附加或对其进行任何修改时,它都会创建一个新的String 对象。

      - 所以使用StringBuilderappend()方法(如果线程安全重要),否则使用StringBuffer(如果线程安全 很重要。),这将是一种有效的方法。

      【讨论】:

        【解决方案5】:

        java.lang.StringBuilder。使用 int 构造函数创建初始大小。

        【讨论】:

          猜你喜欢
          • 2020-01-09
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-11-03
          • 2016-03-13
          • 1970-01-01
          • 2010-09-09
          相关资源
          最近更新 更多