关闭

5种字符串拼接方法效率的测试

标签: string拼接效率
853人阅读 评论(0) 收藏 举报
分类:
         在实际使用中我们经常要用到字符串的拼接,但是拼接时我们又需要考虑什么样的拼接方式才是最有效率的,下面我们进行验证一下:
代码如下,分别设置相同的变量进行连接,使用数字作为连接的介质,让连接的次数和内容相同,

public static long currentTimeMillis()

该方法的作用是返回当前的计算机时间,时间的表达格式为当前计算机时间和GMT时间(格林威治时间)1970年1月1号0时0分0秒所差的毫秒数。

在下面代码中,:
  package sample;
import java.sql.Date;
import java.util.ArrayList;
import java.util.List;
import org.apache.commons.lang.StringUtils;
  public class StringTest
  {
     public static void main(String [] args)
     {//mian方法
    	 System.out.println("开始计算:");
    	 long plus=stringPlus();
    	 long stringBuffer=stringStringBuffer();
    	 long stringBuilder=stringStringBuilder();
    	 long stringConcat=stringConcat();
    	 long stringJoin=stringJoin();
    	 System.out.println("plus:"+plus);
    	 System.out.println("stringConcat:"+stringConcat);
    	 System.out.println("stringJoin:"+stringJoin);
    	 System.out.println("stringBuffer:"+stringBuffer);
    	 System.out.println("stringBuilder:"+stringBuilder);
     }
     public static long stringPlus()
     {
    	 String str="";
    	 long ts=System.currentTimeMillis();
       //-----------------------------
       for(int i=1;i<=10000;i++)
       {
    	   str+=i;
       }
       //-------------------------------
       long te=System.currentTimeMillis();
       long d=(te-ts);
       return d;
     }
     public static long stringJoin()
     {
    	 List<String> list = new ArrayList<String>();
        long ts = System.currentTimeMillis();
        //------------------------------------
         for(int i=1;i<=10000;i++)
         {
         list.add(String.valueOf(i));
         }
         //-----------------------------------
         StringUtils.join(list.iterator(),"");
         long te=System.currentTimeMillis();
         long d=(te-ts);
         return d;
     }
     public static long  stringStringBuffer()
     {
    	 StringBuffer sb=new StringBuffer();
    	 sb.append("");
    	 long ts=System.currentTimeMillis();
       //-----------------------------
       for(int i=1;i<=10000;i++)
       {
    	   sb.append(i);
       }
       //-------------------------------   
       long te=System.currentTimeMillis();
       long d=(te-ts);
      return d;
     }
     public static long  stringStringBuilder()
     {
    	 StringBuilder sb=new StringBuilder();
    	 sb.append("");
    	 long ts=System.currentTimeMillis();
       //-----------------------------
       for(int i=1;i<=10000;i++)
       {
    	   sb.append(i);
       }
       //-------------------------------   
       long te=System.currentTimeMillis();
       long d=(te-ts);
       return d;
     }
     public static long  stringConcat()
     {
    	 String s = "";
         long ts = System.currentTimeMillis();
         //--------------------------------------------------------
         for (int i = 1; i < 10000; i++) {
             s = s.concat(String.valueOf(i));
         }
         //----------------------------------------------------------
         long te=System.currentTimeMillis();
         long d=(te-ts);
         return d;
     }
  }

程序运行之后,我们能够看到如下结果:

运行1

进行了第二次和第三次运行次运行,其结果分别如下:

---------


总结:

用+的方式效率最差,concat由于是内部机制实现,比+的方式好了不少。

Join和StringBuffer居中,StringBuffered方法较差

StringBuilder 的速度最快,但其有线程安全的问题,而且存在版本限制问题,一般情况下最好使用StringBuffer。

 

 

1
0
查看评论

ESLint javascript格式要求

首行缩进2个空格 eslint: indent functionhello (name) { console.log('hi', name) } 字符串使用单引号(除了避免转义) eslint: quotes console.log(...
  • archer119
  • archer119
  • 2017-04-09 19:01
  • 1215

web学习笔记05-EsLint规则与配置

1.EsLint规则    ESLint Rules    所有的规则默认都是禁用的。在配置文件中,使用 "extends": "eslint:recommended" 来启用推荐...
  • sinat_31511831
  • sinat_31511831
  • 2017-01-12 14:43
  • 2967

Android中几种字符串拼接的效率比较

废话不多说,直接上代码 long n = 10000; long start1 = System.currentTimeMillis(); String s1 = new String("hello"); for (long i = 0; i < n...
  • yzx0xyz
  • yzx0xyz
  • 2015-06-08 22:05
  • 6284

模仿log4j的日志字符串格式化log(format,args)

什么也不说,直接看代码。 import java.util.Collection; import net.xuele.common.utils.format.JsonUtils; import org.apache.commons.collections.CollectionUtils; impo...
  • xcwll314
  • xcwll314
  • 2015-12-15 10:57
  • 2920

slf4j和log4j结合打印参数化日志

在利用log4j打印日志时,大部分情况下日志信息都是固定的,但有些时候日志的信息中带有参数化信息,此时可以通过拼接字符串来打印: logger.debug("参数为:" + i); 此种情况下,如果日志级别为INFO,仍要进行一次字符串拼接的操作,为了节省资源,我们可以这样写: ...
  • sad_orc
  • sad_orc
  • 2014-02-10 15:43
  • 6246

js两种拼接字符串方法

js两种拼接字符串方法function(msgArr) { var len = msgArr.length; var n = 0 ; var htmlSpan = ""; for (var j = 0; j < len - 1; j++) {...
  • wumingxiaoqiang
  • wumingxiaoqiang
  • 2016-02-25 18:11
  • 10909

log4j和slf4j日志框架入门

转自:http://sishuok.com/forum/blogPost/list/3740.html Log4j是什么、有什么 介绍 Log4j是Apache的一个开放源代码项目,通过使用Log4j,可以控制日志信息输送的目的地是控制台、文件、GUI组件、甚至是套接口服务器、NT的事件记...
  • zht666
  • zht666
  • 2013-04-07 16:05
  • 8679

5种字符串拼接方法效率的测试

在实际使用中我们经常要用到字符串的拼接,但是拼接时我们又需要考虑什么样的拼接方式才是最有效率的,下面我们进行验证一下: 代码如下,分别设置相同的变量进行连接,使用数字作为连接的介质,让连接的次数和内容相同,用+的方式效率最差,concat由于是内部机制实现,比+的方式好了不少。 Join和Stri...
  • suwu150
  • suwu150
  • 2016-08-31 23:26
  • 853

提高js拼接字符串效率--自定义StringBulider

我们知道java中String是引用类型,使用+=进行字符串拼接将会频繁地分配新地址,指向新的地址块,这无疑白白地消耗了系统的性能。javascript中的字符串类型同java的String类似,如果我们大量使用+=进行字符串拼接的话,将会使界面失去响应(卡死状态)。     &...
  • czw2010
  • czw2010
  • 2014-01-18 15:25
  • 21079

PHP ,与. 字符串拼接效率比较及原理

正常人在遇到字符串和变量拼接时,往往会写如下代码 $username = 'Stussy'; $level = '白金'; echo "欢迎".$username.$level."会员"; 乍看上去没毛病,实际我们...
  • a359611223
  • a359611223
  • 2017-08-11 00:11
  • 309
    个人资料
    • 访问:500429次
    • 积分:6909
    • 等级:
    • 排名:第4004名
    • 原创:231篇
    • 转载:107篇
    • 译文:0篇
    • 评论:65条
    博客专栏
    最新评论