Kata pengantar
Baru -baru ini saya menulis sesuatu yang mungkin mempertimbangkan penyambungan string dan memikirkan beberapa metode, tetapi kinerjanya tidak diketahui, jadi mari kita uji di bawah ini. Mari kita lihat perkenalan terperinci bersama -sama.
Kode sampel
tes kelas publik {daftar <string> list = arraylist baru <> (); @Before public void init () {intstream.range (0, 100000) .foreach ((index) -> {list.add ("str" + index);}); } @org.junit.test public void test1 () {string ss = ""; Long StartTime = System.CurrentTimeMillis (); untuk (string s: list) {ss += s; } System.out.println (System.CurrentTimeMillis () - StartTime); } @org.junit.test public void test2 () {string ss = ""; Long StartTime = System.CurrentTimeMillis (); untuk (string s: list) {ss = ss.concat (s); } System.out.println (System.CurrentTimeMillis () - StartTime); } @org.junit.test public void test3 () {stringBuilder ss = new stringBuilder (); Long StartTime = System.CurrentTimeMillis (); untuk (string s: list) {ss.append (s); } System.out.println (System.CurrentTimeMillis () - StartTime); } @org.junit.test public void test4 () {long starttime = system.currentTimeMillis (); Stringutils.join (daftar); System.out.println (System.CurrentTimeMillis () - StartTime); } @org.junit.test public void test5 () {stringBuffer ss = new stringBuffer (); Long StartTime = System.CurrentTimeMillis (); untuk (string s: list) {ss.append (s); } System.out.println (System.CurrentTimeMillis () - StartTime); }}Tipe Pertama: 33809
Tipe Kedua: 8851
Jenis ketiga: 6
Tipe Keempat: 12
Tipe Kelima: 7
Kinerja: StringBuilder>StringBuffer>StringUtils.join>concat>+
Kemudian menganalisisnya dari tingkat kode sumber
StringBuilder:
Setiap string splicing hanya memperluas array char internal dan hanya menghasilkan string akhir, jadi ini adalah yang paling efisien
StringBuffer:
Dibandingkan dengan StringBuilder, hanya ada satu lagi disinkronkan, sehingga perbedaannya tidak besar dalam satu kasus berulir.
Stringutils.join:
Anda dapat melihat bahwa itu masih diimplementasikan secara internal dengan StringBuilder, tetapi setiap loop memiliki pemisah tambahan untuk menilai, jadi itu sedikit lebih lambat, tetapi tidak banyak, dan itu adalah urutan besarnya dalam waktu.
Concat:
Dapat dilihat bahwa setiap koneksi akan menghasilkan string, jadi efisiensinya sangat rendah
+:
Karena ini adalah operator yang kelebihan beban, kode sumber tidak dapat ditemukan, tetapi efisiensinya adalah yang terendah sesuai dengan hasilnya
Meringkaskan
Di atas adalah seluruh konten artikel ini. Saya berharap konten artikel ini memiliki nilai referensi tertentu untuk studi atau pekerjaan semua orang. Jika Anda memiliki pertanyaan, Anda dapat meninggalkan pesan untuk berkomunikasi. Terima kasih atas dukungan Anda ke wulin.com.