欧美阿v视频在线大全_亚洲欧美中文日韩V在线观看_www性欧美日韩欧美91_亚洲欧美日韩久久精品

主頁 > 知識庫 > StringBuider 在什么條件下、如何使用效率更高

StringBuider 在什么條件下、如何使用效率更高

熱門標簽:聯(lián)通外呼系統(tǒng)電腦app軟件 400電話申請到底哪家好 鶴壁高頻外呼系統(tǒng)多少錢一個月 地圖標注項目幾個月 宿遷怎么辦理400電話 400電話辦理費用低 蘇州呼叫中心外呼系統(tǒng)哪家強 谷歌地圖標注日期 外呼系統(tǒng)怎么群發(fā)短信

引言

都說 StringBuilder 在處理字符串拼接上效率要強于 String,但有時候我們的理解可能會存在一定的偏差。最近我在測試數(shù)據(jù)導(dǎo)入效率的時候就發(fā)現(xiàn)我以前對 StringBuilder 的部分理解是錯誤的。 后來我通過實踐測試 + 找原理 的方式搞清楚了這塊的邏輯。現(xiàn)在將過程分享給大家

測試用例

我們的代碼在循環(huán)中拼接字符串一般有兩種情況

第一種就是每次循環(huán)將對象中的幾個字段拼接成一個新字段,再賦值給對象第二種操作是在循環(huán)外創(chuàng)建一個字符串對象,每次循環(huán)向該字符串拼接新的內(nèi)容。循環(huán)結(jié)束后得到拼接好的字符串

對于這兩種情況,我創(chuàng)建了兩個對照組

第一組:

在每次 For 循環(huán)中拼接字符串,即拼即用、用完即毀。分別使用 String 和 StringBuilder 拼接

 /**
  * 循環(huán)內(nèi) String 拼接字符串,一次循環(huán)后銷毀
  */
 public static void useString(){
  for (int i = 0; i  CYCLE_NUM_BIGGER; i++) {
   String str = str1 + i + str2 + i + str3 + i + str4 ;
  }
 }

 /**
  * 循環(huán)內(nèi) 使用 StringBuilder 拼接字符串,一次循環(huán)后銷毀
  */
 public static void useStringBuilder(){
  for (int i = 0; i  CYCLE_NUM_BIGGER; i++) {
   StringBuilder sb = new StringBuilder();
   String s = sb.append(str1).append(i).append(str2).append(i).append(str3).append(i).append(str4).toString();
  }
 }

第二組:

多次 For 循環(huán)拼接一個字符串,循環(huán)結(jié)束后使用字符串,使用后由垃圾回收器回收。也是分別使用 String 和 StringBuilder 拼接

 /**
  * 多次循環(huán)拼接成一個字符串 用 String
  */
 public static void useStringSpliceOneStr (){
  String str = "";
  for (int i = 0; i  CYCLE_NUM_LOWER; i++) {
   str += str1 + str2 + str3 + str4 + i;
  }
 }

 /**
  * 多次循環(huán)拼接成一個字符串 用 StringBuilder
  */
 public static void useStringBuilderSpliceOneStr(){
  StringBuilder sb = new StringBuilder();
  for (int i = 0; i  CYCLE_NUM_LOWER; i++) {
   sb.append(str1).append(str2).append(str3).append(str4).append(i);
  }
 }

為了保證測試質(zhì)量,在每個測試項目進行前。線程休息 2s,之后空跑 5 次熱身。最后執(zhí)行 5 次求平均時間的方式計算時間

 public static int executeSometime(int kind, int num) throws InterruptedException {
  Thread.sleep(2000);
  int sum = 0;
  for (int i = 0; i  num + 5; i++) {
   long begin = System.currentTimeMillis();

   switch (kind){
    case 1:
     useString();
     break;
    case 2:
     useStringBuilder();
     break;
    case 3:
     useStringSpliceOneStr();
     break;
    case 4:
     useStringBuilderSpliceOneStr();
     break;
    default:
     return 0;
   }

   long end = System.currentTimeMillis();

   if(i > 5){
    sum += (end - begin);
   }
  }
  return sum / num;
 }

主方法

public class StringTest {
 public static final int CYCLE_NUM_BIGGER = 10_000_000;
 public static final int CYCLE_NUM_LOWER = 10_000;
 public static final String str1 = "張三";
 public static final String str2 = "李四";
 public static final String str3 = "王五";
 public static final String str4 = "趙六";


 public static void main(String[] args) throws InterruptedException {
  int time = 0;
  int num = 5;

  time = executeSometime(1, num);
  System.out.println("String拼接 "+ CYCLE_NUM_BIGGER +" 次," + num + "次平均時間:" + time + " ms");

  time = executeSometime(2, num);
  System.out.println("StringBuilder拼接 "+ CYCLE_NUM_BIGGER +" 次," + num + "次平均時間:" + time + " ms");

  time = executeSometime(3, num);
  System.out.println("String拼接單個字符串 "+ CYCLE_NUM_LOWER +" 次," + num + "次平均時間:" + time + " ms");

  time = executeSometime(4, num);
  System.out.println("StringBuilder拼接單個字符串 "+ CYCLE_NUM_LOWER +" 次," + num + "次平均時間:" + time + " ms");

 }
} 

測試結(jié)果

測試結(jié)果如下

結(jié)果分析

第一組

10_000_000 次循環(huán)拼接,在循環(huán)內(nèi)使用 String 和 StringBuilder 的效率是一樣的!為什么呢?

使用 javap -c StringTest.class 反編譯查看兩個方法編譯后的文件:

可以發(fā)現(xiàn) String 方法拼接字符串編譯器優(yōu)化后使用的就是 StringBuilder、因此用例1 和用例2 的效率是一樣的。

第二組

第二組的結(jié)果就是大家喜聞樂見的了,由于 10_000_000 次循環(huán)String 拼接實在太慢所以我采用了 10_000 次拼接來分析。

分析用例3:雖然編譯器會對 String 拼接做優(yōu)化,但是它每次在循環(huán)內(nèi)創(chuàng)建 StringBuilder 對象,在循環(huán)內(nèi)銷毀。下次循環(huán)他有創(chuàng)建。相比較用例4在循環(huán)外創(chuàng)建,多了 n 次 new 對象、銷毀對象的操作、n - 1 次將 StringBuilder 轉(zhuǎn)換成 String 的操作 。效率低也是理所應(yīng)當(dāng)了。

擴展

第一組的測試還有一種寫法:

 /**
  * 循環(huán)內(nèi) 使用 StringBuilder 拼接字符串,一次循環(huán)后銷毀
  */
 public static void useStringBuilderOut(){
  StringBuilder sb = new StringBuilder();
  for (int i = 0; i  CYCLE_NUM_BIGGER; i++) {
//   sb.setLength(0);
   sb.delete(0, sb.length());
   String s = sb.append(str1).append(i).append(str2).append(i).append(str3).append(i).append(str4).toString();
  }
 }

循環(huán)外創(chuàng)建 StringBuilder 每次循環(huán)開始的時候清空 StringBuilder 的內(nèi)容然后拼接。這種寫法無論使用 sb.setLength(0); 還是 sb.delete(0, sb.length()); 效率都比直接在循環(huán)內(nèi)使用 String / StringBuilder 慢。奈何才疏學(xué)淺我一直想不明白為什么他慢。我猜測是 new 對象的速度比重置長度慢,于是這樣測試了以下:

 public static void createStringBuider() {
  for (int i = 0; i  CYCLE_NUM_BIGGER; i++) {
   StringBuilder sb = new StringBuilder();
  }
 }

 public static void cleanStringBuider() {
  StringBuilder sb = new StringBuilder();
  for (int i = 0; i  CYCLE_NUM_BIGGER; i++) {
   sb.delete(0, sb.length());
  }
 }

但是結(jié)果是 cleanStringBuider 更快。讓我摸不著頭腦

如果有大神看到希望可以幫忙分析分析

結(jié)論

編譯器會將 String 拼接優(yōu)化成使用 StringBuilder,但是還是有一些缺陷的。主要體現(xiàn)在循環(huán)內(nèi)使用字符串拼接,編譯器不會創(chuàng)建單個 StringBuilder 以復(fù)用

對于多次循環(huán)內(nèi)拼接一個字符串的需求:StringBuilder 很快,因為其避免了 n 次 new 對象、銷毀對象的操作,n - 1 次將 StringBuilder 轉(zhuǎn)換成 String 的操作

StringBuilder 拼接不適用于循環(huán)內(nèi)每次拼接即用的操作方式。因為編譯器優(yōu)化后的 String 拼接也是使用 StringBuilder 兩者的效率一樣。后者寫起來還方便...

到此這篇關(guān)于StringBuider 在什么條件下、如何使用效率更高?的文章就介紹到這了,更多相關(guān)StringBuider如何使用效率更高內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • 深入解析Java編程中的StringBuffer與StringBuider

標簽:莆田 哈爾濱 錫林郭勒盟 鄂爾多斯 丹東 遵義 襄陽 雙鴨山

巨人網(wǎng)絡(luò)通訊聲明:本文標題《StringBuider 在什么條件下、如何使用效率更高》,本文關(guān)鍵詞  StringBuider,在什么,條件下,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《StringBuider 在什么條件下、如何使用效率更高》相關(guān)的同類信息!
  • 本頁收集關(guān)于StringBuider 在什么條件下、如何使用效率更高的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    欧美阿v视频在线大全_亚洲欧美中文日韩V在线观看_www性欧美日韩欧美91_亚洲欧美日韩久久精品
  • <rt id="w000q"><acronym id="w000q"></acronym></rt>
  • <abbr id="w000q"></abbr>
    <rt id="w000q"></rt>
    亚洲天堂av一区| 国产91精品一区二区麻豆网站| 91网上在线视频| av激情在线观看| 国产欧美视频一区二区三区| 狠狠色综合色综合网络| 日韩中文字幕电影| 精品国产自在久精品国产| 青娱乐精品视频| 精品人妻互换一区二区三区| 精品国产欧美一区二区| 另类小说一区二区三区| a级在线免费观看| 久久综合色婷婷| 国产一区二区三区不卡在线观看| 一级黄色性视频| 久久众筹精品私拍模特| 激情综合亚洲精品| 99热6这里只有精品| 亚洲国产精品精华液2区45| 国产福利91精品一区| 神马久久精品综合| 国产精品婷婷午夜在线观看| 风间由美一区二区av101| 疯狂试爱三2浴室激情视频| 中文字幕在线视频一区| 亚洲国产综合av| 欧美日本在线观看| 日韩国产精品久久| 9.1成人看片免费版| 久久久亚洲精品一区二区三区| 国产精品资源在线| 色综合天天狠狠| 亚洲综合成人网| 岛国精品资源网站| 精品久久久久久久久久久久包黑料| 国产麻豆视频一区| 91嫩草|国产丨精品入口| 亚洲精品国产精华液| 极品人妻一区二区| 在线成人av影院| 久久99热99| 久久久久久视频| 亚洲线精品一区二区三区| 疯狂揉花蒂控制高潮h| 久久久久久久免费视频了| 国产91色综合久久免费分享| 色综合久久88色综合天天| 亚洲国产精品一区二区www | 久久九九国产精品| 成人激情黄色小说| 欧美日本在线一区| 日韩电影在线一区| 国产7777777| 在线观看免费黄色网址| 中文字幕中文乱码欧美一区二区| 中国男女全黄大片| 精品美女一区二区三区| 成人精品免费视频| 欧美一区二区三区啪啪| 国产精品一区在线观看你懂的| 91国偷自产一区二区开放时间 | 色综合久久综合中文综合网| 一区二区三区91| 久久丫精品忘忧草西安产品| 亚洲欧美色图小说| 国产在线观看h| 亚洲最大色网站| 法国空姐电影在线观看| 亚洲日本丝袜连裤袜办公室| 人妻熟女aⅴ一区二区三区汇编| 国产精品女同一区二区三区| 性久久久久久久久久久| 国产精品的网站| 中文字幕一区二区人妻在线不卡| 最近日韩中文字幕| 国产黄色网址在线观看| 最新欧美精品一区二区三区| 精品无码人妻一区二区免费蜜桃| 亚洲精品欧美激情| www..com.cn蕾丝视频在线观看免费版| 亚洲黄色片在线观看| 精品亚洲aⅴ无码一区二区三区| 樱花草国产18久久久久| 久久久久久久久久久久| 亚洲国产视频在线| 手机看片日韩av| 视频精品一区二区| 色先锋aa成人| 国产一区二区在线看| 制服丝袜亚洲网站| 暴力调教一区二区三区| 久久亚洲捆绑美女| 粉嫩av懂色av蜜臀av分享| 中文字幕一区二区三区四区不卡| 亚洲精品成人无码| 日韩制服丝袜av| 欧美私模裸体表演在线观看| 国产a精品视频| 久久精品人人做人人综合 | 一级片视频免费看| 午夜久久久久久| 欧洲国产伦久久久久久久| 国产精品99久久久久久似苏梦涵| 欧美成人一区二区| 久久福利小视频| 亚洲一区二区偷拍精品| 一本色道亚洲精品aⅴ| 国产成人精品一区二| 精品国产青草久久久久福利| 激情综合丁香五月| 亚洲.国产.中文慕字在线| 欧美在线999| 91在线视频网址| 亚洲欧洲日韩综合一区二区| 97精品在线播放| 4438x成人网最大色成网站| av一本久道久久综合久久鬼色| 国产日产欧美一区二区三区| 国产精品国产三级国产专业不 | 怡红院一区二区| 夜夜揉揉日日人人青青一国产精品| 午夜69成人做爰视频| 成人深夜在线观看| 国产视频一区二区在线| 日本黄色激情视频| 国产一区二区三区免费观看| 久久精品视频一区| 网站永久看片免费| 国产高清亚洲一区| 国产午夜精品久久久久久久| 美女网站视频色| 国产馆精品极品| 国产精品久久久久久久久免费相片 | 国产精品一级在线| 久久久国产午夜精品| 99精品全国免费观看| 国产精一区二区三区| 国产欧美日产一区| 三级黄色录像视频| 成人精品视频网站| 一区二区三区免费网站| 欧美视频日韩视频| 欧美熟妇精品一区二区蜜桃视频| 香蕉av福利精品导航| 日韩欧美高清在线| 高清国产在线观看| 国产mv日韩mv欧美| 亚洲男帅同性gay1069| 精品视频免费在线| 美女伦理水蜜桃4| 日韩成人精品在线观看| 精品久久久久久久久久久院品网| 国产三级短视频| 成人午夜私人影院| 夜夜精品浪潮av一区二区三区| 91高清在线观看| 久久性爱视频网站| 美国欧美日韩国产在线播放| 国产欧美日韩麻豆91| 一本大道久久a久久精品综合| 欧美日韩一区二区区别是什么 | 女性裸体视频网站| 99久久精品免费观看| 亚洲国产综合色| 欧美不卡视频一区| 国产性猛交xx乱| 91亚洲精品乱码久久久久久蜜桃| 一区二区三区加勒比av| 日韩欧美国产精品一区| 91香蕉视频网| 亚洲AV成人精品| 蜜桃一区二区三区在线观看| 日本一区二区成人在线| 欧美日本一道本在线视频| wwwwww日本| av成人免费在线观看| 日韩国产欧美在线播放| 欧美激情在线一区二区| 精品视频一区 二区 三区| 法国伦理少妇愉情| 99久久精品免费| 麻豆精品蜜桃视频网站| 亚洲图片欧美激情| 91精品国产综合久久精品app| 欧美性生给视频| 五月天丁香社区| 国产精品538一区二区在线| 一区二区欧美精品| 久久婷婷国产综合精品青草| 欧洲精品中文字幕| 战狼4完整免费观看在线播放版| 国产精品日日摸夜夜爽| 国产不卡视频在线播放| 丝袜a∨在线一区二区三区不卡| 中国色在线观看另类| 99九九99九九九视频精品| 蜜臀av一区二区| 亚洲女人的天堂| 久久毛片高清国产|