zoukankan      html  css  js  c++  java
  • String--StringBuffer-StringBuilder区别

    package mDemo;

    import java.util.ArrayList;
    import java.util.Iterator;
    import java.util.List;

    public class Test1 {
    /*
    String:字符串常量
        StringBuffer:字符串变量---线程安全的
        StringBuilder:字符串变量---线程非安全的
    * */

    public static String BASEINFO = "Mr.Y";
    public static final int COUNT = 2000000;

    public static void main(String[] args) {
    String s = "abcd";
    s = s+1;
    System.out.println(s);// result : abcd1

    doStringTest();
    doStringBufferTest();
    doStringBuilderTest();
    //不考虑多线程,采用String对象时(我把Count/100),执行时间比其他两个都要高,而采用StringBuffer对象和采用StringBuilder对象的差别也比较明显。
    //由此可见,如果我们的程序是在单线程下运行,或者是不必考虑到线程同步问题,我们应该优先使用StringBuilder类;如果要保证线程安全,自然是StringBuffer。

    List<String> list = new ArrayList<String>();
    list.add(" I ");
    list.add(" like ");
    list.add(" BeiJing ");
    list.add(" tian ");
    list.add(" an ");
    list.add(" men ");
    list.add(" . ");

    doStringBufferListTest(list);
    doStringBuilderListTest(list);
    //从后面List的测试结果可以看出,除了对多线程的支持不一样外,这两个类的使用方式和结果几乎没有任何差别,

    stringBufferMethods();//stringBuffer常用方法
    }

    /**
    * 执行一项String赋值测试
    */
    public static void doStringTest() {

    String str = new String(BASEINFO);
    long starttime = System.currentTimeMillis();
    for (int i = 0; i < COUNT / 100; i++) {
    str = str + "miss";
    }
    long endtime = System.currentTimeMillis();
    System.out.println((endtime - starttime)
    + " millis has costed when used String."); //526millis
    }

    /**
    * 执行一项StringBuffer赋值测试
    */
    public static void doStringBufferTest() {

    StringBuffer sb = new StringBuffer(BASEINFO);
    long starttime = System.currentTimeMillis();
    for (int i = 0; i < COUNT; i++) {
    sb = sb.append("miss");
    }
    long endtime = System.currentTimeMillis();
    System.out.println((endtime - starttime)
    + " millis has costed when used StringBuffer."); //62millis
    }

    /**
    * 执行一项StringBuilder赋值测试
    */
    public static void doStringBuilderTest() {

    StringBuilder sb = new StringBuilder(BASEINFO);
    long starttime = System.currentTimeMillis();
    for (int i = 0; i < COUNT; i++) {
    sb = sb.append("miss");
    }
    long endtime = System.currentTimeMillis();
    System.out.println((endtime - starttime)
    + " millis has costed when used StringBuilder."); //16millis
    }

    /**
    * 测试StringBuffer遍历赋值结果
    *
    * @param mlist
    */
    public static void doStringBufferListTest(List<String> mlist) {
    StringBuffer sb = new StringBuffer();
    long starttime = System.currentTimeMillis();
    for (String string : mlist) {
    sb.append(string);
    }
    long endtime = System.currentTimeMillis();
    System.out.println(sb.toString() + "buffer cost:"
    + (endtime - starttime) + " millis"); //0millis
    }

    /**
    * 测试StringBuilder迭代赋值结果
    *
    * @param mlist
    */
    public static void doStringBuilderListTest(List<String> mlist) {
    StringBuilder sb = new StringBuilder();
    long starttime = System.currentTimeMillis();
    for (Iterator<String> iterator = mlist.iterator(); iterator.hasNext();) {
    sb.append(iterator.next());
    }

    long endtime = System.currentTimeMillis();
    System.out.println(sb.toString() + "builder cost:"
    + (endtime - starttime) + " millis"); //0millis
    }

    /**
    * 执行一项StringBuilder常用方法
    */
    public static void stringBufferMethods() {
    //这样初始化出的StringBuffer对象是一个空的对象
    StringBuffer s = new StringBuffer();
    //分配了长度512字节的字符缓冲区
    StringBuffer sb1=new StringBuffer(512);
    //创建带有内容的StringBuffer对象,在字符缓冲区中存放字符串“how are you?”
    StringBuffer sb2=new StringBuffer("how are you?");
    //添加字符串
    sb2.append(true);//how are you?true
    //删除,按下标删除,从0开始
    sb2.deleteCharAt(1);//hw are you?true
    //删除,按下标删除,包含start,不包含end索引值的区间
    sb2.delete(1, 3);//hare you?true
    //根据下标插入
    sb2.insert(4,false);//harefalse you?true

    StringBuffer sb = new StringBuffer("abc");
    //反转
    sb.reverse();//cba
    //替换值
    sb.setCharAt(1, 'D');//cDa
    //trimToSize()---将StringBuffer对象的中存储空间缩小到和字符串长度一样的长度,减少空间的浪费,和String的trim()是一样的作用
    }
    }

  • 相关阅读:
    ORACLE表空间管理维护
    oracle表分区详解
    Jquery
    B
    A
    E
    字符串排成字典序,字符串数组
    命令,快捷键,配置
    第一个java程序
    A
  • 原文地址:https://www.cnblogs.com/kekang/p/6049685.html
Copyright © 2011-2022 走看看