`
niwtsew
  • 浏览: 74215 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

java.lang.StringBuffer VS java.lang.StringBuilder

阅读更多
java.lang.StringBuffer:  thread-safe(之所以是thread-safe的是因为它的所有方法(构造函数除外)都是synchronized的)
java.lang.StringBuilder: not thread-safe, much faster than StringBuffer since no synchronization.
StringBuilder was introduced since JDK1.5 and it provides the same operation as StringBuffer.


AbstractStringBuilder里有个乍看很巧妙细看很愚蠢再仔细推敲很高明的函数 static int stringSizeOfInt(int x) ,该函数返回整形数字x的长度,比如x=5,返回长度1,x=10,返回2,x=999.返回3.请看实现:
    final static int [] sizeTable = { 9, 99, 999, 9999, 99999, 999999, 9999999,
                                     99999999, 999999999, Integer.MAX_VALUE };

    // Requires positive x
    static int stringSizeOfInt(int x) {
        for (int i=0; ; i++)
            if (x <= sizeTable[i])
                return i+1;
    }

    // Requires positive x
    static int stringSizeOfLong(long x) {
        long p = 10;
        for (int i=1; i<19; i++) {
            if (x < p)
                return i;
            p = 10*p;
        }
        return 19;
    }

为啥不直接用String.valueOf(x).length()呢?(负数的时候,-1即可啊) 猜想:应该是这种算法的效率更高?(看String.valueOf()的实现吧)。
BTW:可以看到JDK的代码里,存在一些看着不是那么优雅和简洁明了的代码,根据这个猜想,有些时候为了获得性能方面的提升,丑陋的代码还是需要的,呵呵。

令一个很好的算法同样位于AbstractStringBuilder,reverse()函数,实现如下(下例去除掉关于utf-16 surrogate的考虑)
    public AbstractStringBuilder reverse() {
    int n = count - 1;
    for (int j = (n-1) >> 1; j >= 0; --j) {
        char temp = value[j];
        char temp2 = value[n - j];
        value[j] = temp2;
        value[n - j] = temp;
    }
    return this;
    }
由此可以引伸出reverse(char[]) or reverse(String)等等。。。

注意AbstractStringBuilder虽然是一个abstract,但是只有一个方法是abstract的,就是String toString(). 而StringBuffer和StringBuilder都是exteds AbstractStringBuilder,它俩各个方法的重载基本上都是调用了super.xxxx ,唯一不同的是synchronization以及返回值的不同.
至于String和这俩的区别,没啥好说的,google一大把
分享到:
评论

相关推荐

    Java类库复习——java.lang.String

    在Java编程语言中,`java.lang.String`是最重要的类之一,它是所有字符串操作的基础。这个类位于核心类库中,因此无需显式导入即可使用。本文将深入探讨`String`类的一些关键知识点,包括它的特性、构造方法、常用...

    org.apache.commons.lang jar下载

    11. **构建者模式**: Commons Lang 提供了多种Builder类,如 `StringBuilder` 和 `StringBuffer` 的变体,允许更灵活地构建复杂字符串。 12. **枚举枚举**: `EnumSet` 和 `EnumMap` 类提供了针对枚举类型的集合实现...

    java.lang.OutOfMemoryErrorJavaheapspace.pdf

    6. **使用StringBuffer或StringBuilder代替+操作**:在进行大量字符串连接时,使用这两个类可以避免创建大量中间对象。 了解`java.lang.OutOfMemoryError: Java heap space`错误的原因和解决方案,有助于我们在编写...

    java.StringBuilder.md

    StringBuilder类位于java.lang包中,继承自AbstractStringBuilder,具备丰富的API。它具有以下特点: 1. 可变性:StringBuilder对象的内部字符数组在初始化后可以根据需要扩展,从而在不生成新的对象的情况下修改...

    java.StringBuffer(处理方案示例).md

    Java中的StringBuffer是一个非常重要的类,它位于java.lang包中。StringBuffer与String一样,用于处理字符串内容,但不同的是StringBuffer是可变的,这意味着在创建 StringBuffer 对象后,它所包含的字符串内容可以...

    java基础--4.常用类-3.StringBuffer、StringBuilder

    在Java编程语言中,`StringBuffer`和`StringBuilder`是两个非常重要的类,它们主要用于处理字符串的拼接和修改操作。这两个类位于`java.lang`包下,因此在使用时无需显式导入。本篇文章将深入探讨这两个类的特性和...

    java.StringBuilder(解决方案).md

    StringBuilder 是 java.lang 包中的一个类,它继承自 AbstractStringBuilder 类并实现了 CharSequence 和 Appendable 接口。StringBuilder 的实例是可变的,意味着一旦创建,它的内部状态可以改变。这种可变性意味着...

    java工具类

    - `java.lang.StringBuilder` 和 `java.lang.StringBuffer`:用于高效构建字符串,线程安全的分别是`StringBuffer`。 - `java.lang.String`:Java中的不可变字符串类,包含大量字符串操作方法。 5. **异常处理...

    java在线api中文网站

    4. **字符串处理**:`java.lang.String`和`java.lang.StringBuilder/StringBuffer`是处理文本数据的关键类。 5. **日期时间**:`java.time`包在Java 8引入,提供了更强大、更易用的时间日期处理功能。 6. **反射机制...

    Java常用工具类

    3. **字符串处理:** `java.lang.StringBuilder` 和 `java.lang.StringBuffer` 提供了在字符串上进行拼接和修改的高效方法,尤其在多线程环境下,`StringBuffer` 是线程安全的选择。`java.util.regex` 包提供了正则...

    JAVA设计模式在JDK中的应用

    - `java.lang.StringBuilder#append()`: 字符串构建。 - `java.lang.StringBuffer#append()`: 字符串构建。 - `java.sql.PreparedStatement`: 预编译SQL语句。 - `javax.swing.GroupLayout.Group#addComponent()`: ...

    Java资源加载库Azzet.zip

    , java.io.InputStream, java.nio.ByteBuffer, java.io.ByteArrayOutputStream)TXT (java.lang.String, char[], java.nio.CharBuffer, java.lang.StringBuffer, java.lang.StringBuilder)支持的数据源:...

    java常用工具类——个人总结

    - `java.lang.StringBuilder` 和 `java.lang.StringBuffer` 用于高效构建字符串,特别是多线程环境。 - `java.util.regex.Pattern` 和 `java.util.regex.Matcher` 支持正则表达式匹配和操作。 6. **网络工具类**...

    java中stringBuilder的用法.pdf

    Java中的StringBuilder是一个非常重要的类,它位于java.lang包中,被广泛应用于字符串操作中。StringBuilder的主要作用是提供一个可变的字符序列,用以替代不可变的String,以提高性能和效率。当需要频繁修改字符串...

    比较全的java工具类

    - `java.lang.StringBuilder` 和 `java.lang.StringBuffer`:可变的字符串对象,用于构建和修改字符串,`StringBuffer`在多线程环境下更安全。 3. **集合框架**: - `java.util.ArrayList`, `java.util....

    java常用工具类

    - `java.lang.StringBuilder`和`java.lang.StringBuffer`:用于字符串拼接,`StringBuilder`是非线程安全的,而`StringBuffer`是线程安全的。 5. **Apache Commons Lang**: - Apache Commons Lang是Apache软件...

    JDK中的设计模式

    - `java.lang.StringBuffer#append()`:线程安全的字符串构建器。 - `java.nio.ByteBuffer#put()`:以及其他缓冲区类如`CharBuffer`、`ShortBuffer`等,用于填充缓冲区。 - `javax.swing.GroupLayout.Group#add...

    完整版 Java初级教程 Java语言程序设计 第7章 Java中的常用类(共14页).ppt

    【Java初级教程】Java语言程序设计的第7章主要探讨了Java中的一些常用类,包括`java.lang.String`、`java.lang.StringBuilder`和`java.util.StringTokenizer`。以下是对这些类的详细解释: 1. **`java.lang.String`...

Global site tag (gtag.js) - Google Analytics