StringBuffer内容清空效率比较

在开发程序的时候,经常使用StringBuffer来进行字符串的拼接。如果在循环中来反复的做字符串拼接时,会清空Stringbuffer中的内容,然后再拼接新的字符串信息。

//有三种清空方式

StringBuffer buffer = new StringBuffer("我要被清空了 >_<");

buffer.setLength(0);

buffer = new StringBuffer();

buffer.delete(0, buffer.length());

System.nanoTime() 返回最准确的可用系统计时器的当前值,以毫微秒为单位。(毫微妙就是纳秒)

System.currentTimeMillis() 返回以毫秒为单位的当前时间。

加入一段连接,说慎用currentTimeMillis() http://blog.sina.com.cn/s/blog_6b8bd9d80101fe8t.html  还是一脸懵逼

顺便记一下时间的换算关系

1秒=1000毫秒(ms)

1秒=1,000,000 微秒(μs)
1秒=1,000,000,000 纳秒(ns)

1秒=1,000,000,000,000 皮秒(ps)

后面还有飞秒 阿秒 等等一脸懵逼。。。。

从大到小都是1000倍的关系

晒一下测试代码

有的帖子说setLength(0)是效率最高的,结果测试出来就傻了

package test;

public class testStringBufferClear {

    public static void main(String[] args) {

        for (int i = 0; i < 20; i++) {

            test();
        }
    }

    private static void test() {

        StringBuffer buffer = new StringBuffer("我要被清空了 >_<");
        long s1, s2;
        //方式一
        s1 = System.nanoTime();
        for (int i = 0; i < 5000000; i++) {
            buffer.setLength(0);
        }
        s2 = System.nanoTime();
        System.out.println((s2 - s1)+"》》setLength(0)");
        //方式二
        s1 = System.nanoTime();
        for (int i = 0; i < 5000000; i++) {
            buffer = new StringBuffer();
        }
        s2 = System.nanoTime();
        System.out.println((s2 - s1)+"》》new StringBuffer()");
        //方式三
        s1 = System.nanoTime();
        for (int i = 0; i < 5000000; i++) {
            buffer.delete(0, buffer.length());
        }
        s2 = System.nanoTime();
        System.out.println((s2 - s1)+"》》delete(0, buffer.length())");
    }

}

结果变成了这个

81713251》》setLength(0)
69181455》》new StringBuffer()
76279905》》delete(0, buffer.length())
81278911》》setLength(0)
56117204》》new StringBuffer()
410》》delete(0, buffer.length())
65276917》》setLength(0)
50844375》》new StringBuffer()
0》》delete(0, buffer.length())
69770153》》setLength(0)
60818167》》new StringBuffer()
0》》delete(0, buffer.length())
69423257》》setLength(0)
32047503》》new StringBuffer()
0》》delete(0, buffer.length())
64818358》》setLength(0)
73453416》》new StringBuffer()
411》》delete(0, buffer.length())
69963922》》setLength(0)
64979285》》new StringBuffer()
0》》delete(0, buffer.length())
71185656》》setLength(0)
34512727》》new StringBuffer()
0》》delete(0, buffer.length())
66288871》》setLength(0)
32957234》》new StringBuffer()
0》》delete(0, buffer.length())
69014781》》setLength(0)
47149618》》new StringBuffer()
0》》delete(0, buffer.length())
65783510》》setLength(0)
122120758》》new StringBuffer()
0》》delete(0, buffer.length())
67758563》》setLength(0)
29492784》》new StringBuffer()
0》》delete(0, buffer.length())
64075711》》setLength(0)
30184524》》new StringBuffer()
0》》delete(0, buffer.length())
63680783》》setLength(0)
30880371》》new StringBuffer()
410》》delete(0, buffer.length())
66420240》》setLength(0)
29210340》》new StringBuffer()
0》》delete(0, buffer.length())
63746878》》setLength(0)
30056850》》new StringBuffer()
0》》delete(0, buffer.length())
71138445》》setLength(0)
44319434》》new StringBuffer()
0》》delete(0, buffer.length())
63863878》》setLength(0)
30636106》》new StringBuffer()
0》》delete(0, buffer.length())
65043737》》setLength(0)
29686963》》new StringBuffer()
0》》delete(0, buffer.length())
67308624》》setLength(0)
32259336》》new StringBuffer()
0》》delete(0, buffer.length())

下面是单个测试结果

//方式一
80868383》》setLength(0)
75025740》》setLength(0)
67061896》》setLength(0)
64939053》》setLength(0)
69289834》》setLength(0)
64819179》》setLength(0)
64577377》》setLength(0)
76561527》》setLength(0)
69773027》》setLength(0)
65813479》》setLength(0)
64638135》》setLength(0)
64610220》》setLength(0)
65000222》》setLength(0)
63363444》》setLength(0)
65187012》》setLength(0)
64927969》》setLength(0)
65362308》》setLength(0)
64333933》》setLength(0)
65160738》》setLength(0)
65306476》》setLength(0)

//方式二
66744558》》new StringBuffer()
67418235》》new StringBuffer()
60270932》》new StringBuffer()
61198727》》new StringBuffer()
31622195》》new StringBuffer()
81092121》》new StringBuffer()
48929260》》new StringBuffer()
31173898》》new StringBuffer()
31100413》》new StringBuffer()
50957271》》new StringBuffer()
119894872》》new StringBuffer()
35147405》》new StringBuffer()
35889229》》new StringBuffer()
34537358》》new StringBuffer()
35683144》》new StringBuffer()
33686333》》new StringBuffer()
39710019》》new StringBuffer()
34394495》》new StringBuffer()
34933108》》new StringBuffer()
41481450》》new StringBuffer()

方式三
24382114》》delete(0, buffer.length())
28005028》》delete(0, buffer.length())
14795450》》delete(0, buffer.length())
14201005》》delete(0, buffer.length())
23715825》》delete(0, buffer.length())
14937904》》delete(0, buffer.length())
14788061》》delete(0, buffer.length())
14045004》》delete(0, buffer.length())
14287216》》delete(0, buffer.length())
14813924》》delete(0, buffer.length())
13874634》》delete(0, buffer.length())
13862318》》delete(0, buffer.length())
13894751》》delete(0, buffer.length())
14214142》》delete(0, buffer.length())
14727713》》delete(0, buffer.length())
13853697》》delete(0, buffer.length())
13840971》》delete(0, buffer.length())
15115252》》delete(0, buffer.length())
13505980》》delete(0, buffer.length())
13438243》》delete(0, buffer.length())

时间: 2024-11-03 03:38:08

StringBuffer内容清空效率比较的相关文章

jquery 文本框内容清空

$("[type='text']:gt(0)").val(""); //清空输入框的内容,除单据编号 //设置下拉选框的默认选项 $(".select_padding_left").each(function(){ $(this).get(0).selectedIndex=0; });

StringBuffer的拼接效率小细节

最近看项目代码发现经常StringBuffer拼接SQL里面有这样的代码sql.append("select * from XXX where xxx="+xxx+" and yyy="+yyy); 于是我很好奇这样写是按顺序连续append还是先创建一个StringBuffer对象append全部String,然后再传送到sql对象中去 实践检验代码如下 public static void main(String[] args){ t(9); } private

【转】plist文件的内容清空

原文网址:http://zhidao.baidu.com/link?url=3aQGrNnqL2UgQ3UW_RWJJq0ADBmY8zQrpy09j6ScDZEAOd87f-D4bAABog5RFS-jzs0r0ZTUapzdH2LG0j7DzK NSString *filename =[[NSBundle mainBundle] pathForResource:@"file" ofType:@"plist"]; NSArray *clearArray = [NS

String与StringBuffer效率对比

昨天申请了一个LeetCode的账号,先刷了一题最基础的,字符串逆序输出. 我先写出了如下代码: public class Solution { public String reverseString(String s) { String rev = ""; for(int i = s.length()-1; i >= 0; i--){ rev += s.charAt(i); } return rev; } } 这份代码在OJ上运行的结果是Time Limit Exceeded,

linux中如何清空一个文件的内容

方法1: echo "" > /www.jbxue.com /xxx.log 方法2: echo "" >> /www.jbxue.com /xxx.log 方法3: 此命令能与“echo > /var/log/big.log”达到相同效果,不过,命令执行后,需要用“Ctrl + d”结束 方法4: clear > /opt/log/big.log 此命令会把big.log文件内容清空,而不删除文件 方法5: 同样的效果,用true.f

vb.net机房收费 &amp; Register文本框为空提示,一键清空文本框所有内容

已经第二次机房收费系统重构了,一遍当然得有一遍的效果,正如对于文本框为空的提示方法,回顾第一遍机房,那些傻里傻气的If语句让自己对代码的亲和度大打折扣啊!那么到底有什么办法解决那些重复性的判断呢?这时候我们就要提到所谓的Model窗体了.在Model窗体中,建立一个封装数组,当窗体中需要判断大量文本框为空的时候,只需简单的调用即可. 新建一个Model类,来存放公共需要的部分. 1.定义一个结构体Term,且用结构体封装一个数组 Public Structure Term '定义结构体term

如何清空android ListView控件的内容

============问题描述============ 代码如下: BaseAdapter  ba=new BaseAdapter() { public int getCount() { // TODO Auto-generated method stub return count; } public Object getItem(int arg0) { // TODO Auto-generated method stub return null; } public long getItemI

关于docnment.write() 会清空原来的内容

情况一: <script type="text/javascript">  window.onload=function(){   document.write("分享互助"); } </script> </head>  <body>  <div>蚂蚁部落欢迎您</div> </body>   document.write()函数将原来的文档内容清空了 因为: window.onlo

document.write()会清空原来的内容原因

http://www.softwhy.com/forum.php?mod=viewthread&tid=13582 <meta name="author" content="http://www.softwhy.com/" />       <title>蚂蚁部落</title>     <script type="text/javascript">   window.onload=func