คำนำ
ฉันเพิ่งเขียนบางสิ่งที่อาจพิจารณาการประกบสตริงและความคิดของวิธีการหลายวิธี แต่ไม่ทราบประสิทธิภาพดังนั้นให้ทดสอบด้านล่าง มาดูการแนะนำรายละเอียดร่วมกันกันเถอะ
รหัสตัวอย่าง
การทดสอบคลาสสาธารณะ {list <string> list = new ArrayList <> (); @Before โมฆะสาธารณะ init () {intstream.Range (0, 100000) .Foreach ((ดัชนี) -> {list.add ("str" + ดัชนี);}); } @org.junit.test โมฆะสาธารณะ test1 () {string ss = ""; Long StartTime = System.currentTimeMillis (); สำหรับ (String s: list) {ss += s; } system.out.println (System.currentTimeMillis () - starttime); } @org.junit.test โมฆะสาธารณะ test2 () {string ss = ""; Long StartTime = System.currentTimeMillis (); สำหรับ (String s: list) {ss = ss.concat (s); } system.out.println (System.currentTimeMillis () - starttime); } @org.junit.test โมฆะสาธารณะ test3 () {stringbuilder ss = new StringBuilder (); Long StartTime = System.currentTimeMillis (); สำหรับ (String s: list) {ss.append (s); } system.out.println (System.currentTimeMillis () - starttime); } @org.junit.test โมฆะสาธารณะ test4 () {long starttime = system.currentTimeMillis (); stringutils.join (รายการ); System.out.println (System.CurrentTimeMillis () - StartTime); } @org.junit.test โมฆะสาธารณะ test5 () {stringbuffer ss = new StringBuffer (); Long StartTime = System.currentTimeMillis (); สำหรับ (String s: list) {ss.append (s); } system.out.println (System.currentTimeMillis () - starttime); -ประเภทแรก: 33809
ประเภทที่สอง: 8851
ประเภทที่สาม: 6
ประเภทที่สี่: 12
ประเภทที่ห้า: 7
ประสิทธิภาพ: StringBuilder>StringBuffer>StringUtils.join>concat>+
จากนั้นวิเคราะห์จากระดับซอร์สโค้ด
StringBuilder:
การประกบสตริงแต่ละครั้งจะขยายอาร์เรย์ถ่านภายในและผลิตเฉพาะสตริงสุดท้ายดังนั้นนี่คือประสิทธิภาพมากที่สุด
StringBuffer:
เมื่อเทียบกับ StringBuilder มีการซิงโครไนซ์มากกว่าหนึ่งครั้งดังนั้นความแตกต่างจึงไม่ใหญ่ในเคสเธรดเดียว
stringutils.join:
คุณจะเห็นว่ามันยังคงใช้งานภายในกับ StringBuilder แต่แต่ละลูปมีตัวคั่นเพิ่มเติมเพื่อตัดสินดังนั้นมันจึงช้าลงเล็กน้อย แต่ไม่มากและเป็นลำดับความสำคัญในเวลา
concat:
จะเห็นได้ว่าการเชื่อมต่อแต่ละครั้งจะสร้างสตริงดังนั้นประสิทธิภาพจึงต่ำมาก
-
เนื่องจากเป็นตัวดำเนินการมากเกินไปซอร์สโค้ดจึงไม่สามารถพบได้ แต่ประสิทธิภาพนั้นต่ำที่สุดตามผลลัพธ์
สรุป
ข้างต้นเป็นเนื้อหาทั้งหมดของบทความนี้ ฉันหวังว่าเนื้อหาของบทความนี้จะมีค่าอ้างอิงบางอย่างสำหรับการศึกษาหรือที่ทำงานของทุกคน หากคุณมีคำถามใด ๆ คุณสามารถฝากข้อความไว้เพื่อสื่อสาร ขอบคุณสำหรับการสนับสนุน Wulin.com