`
niwtsew
  • 浏览: 71939 次
  • 性别: 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基础--4.常用类-3.StringBuffer、StringBuilder

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

    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`...

    java常见错误.pdf

    - StringBuffer和StringBuilder:当需要进行频繁的字符串拼接操作时,推荐使用StringBuffer或StringBuilder,因为它们是可变的,从而能够提高性能。 - import语句的使用:Java中的import语句用于引入其他包中的类,...

    Java rt.jar 源码分析

    `StringBuilder`和`StringBuffer`作为可变字符串,它们在多线程环境下提供了线程安全的字符串操作。 `java.util`包中的集合框架是Java编程的重要部分。例如,`ArrayList`和`LinkedList`分别代表动态数组和链表数据...

Global site tag (gtag.js) - Google Analytics