Oleh : Reza Ervani
بسم الله الرحمن الرحيم
Performa Penggabungan String
Saat menggabungkan String kita mesti memperhatikan kemungkinan adanya masalah performa. Menggabungkan dua String di Java akan diterjemahkan oleh kompiler Java ke sesuatu seperti berikut :
String one = "Hello"; String two = " World"; String three = new StringBuilder(one).append(two).toString();
Sebagaimana yang kita lihat, sebuah StringBuilder
yang baru dibuat, dilewatkan bersama-sama dengan String yang pertama ke konstruktornya, dan String kedua ke metode append()
, sebelum akhirnya memanggil metode toString()
. Kode ini sesungguhnya membuat dua objek : instance StringBuilder
dan instance String yang baru yang dikeluarkan dari metode toString()
Saat mengeksekusi dirinya sendiri sebagai suatu statement tunggal, overhead pembuatan dua objek tambahan itu tidak signifikan. Tapi saat dieksekusi di suatu loop, maka ceritanya akan lain.
Berikut contoh loop yang berisi penggabungan tipe String diatas :
String[] strings = new String[]{"one", "two", "three", "four", "five" }; String result = null; for(String string : strings) { result = result + string; }
Kode ini akan dikompail ke sesuatu yang sama dengan kode berikut :
String[] strings = new String[]{"one", "two", "three", "four", "five" }; String result = null; for(String string : strings) { result = new StringBuilder(result).append(string).toString(); }
Kini untuk setiap iterasi pada lopp ini sebuah StringBuilder
yang baru dibuat. Sebagai tambaha, sebuah objek String sementara dibuat oleh metode toString()
. Ini menghasilkan overhead pembuatan objek yang kecil di tiap iterasi. Meskipun ini tidak terasa sebagai pengurang performa.
Saat kode new StringBuilder(result)
dieksekusi, konstruktor StringBuilder
menyalin seluruh karakter dari String result
kedalam StringBuilder
. Semakin banyak looping iterasi, semakin besar String result
yang muncul. Semakin besar String result
yang muncul, semakin lama penyalinan karakter yang ada ke dalam StringBuilder
yang baru dan juga penyalinan karakter dari StringBuilder
ke dalam String sementara yang dibuat oleh metode toString()
. Dengan kata lain, lebih banyak iterasi maka akan semakin lambat masing-masing iterasi.
Cara yang paling cepat untuk menggabungkan String adalah membuat StringBuilder
satu kali saja, dan menggunakan instance yang sama didalam loop. Berikut contohnya :
String[] strings = new String[]{"one", "two", "three", "four", "five" }; StringBuilder temp = new StringBuilder(); for(String string : strings) { temp.append(string); } String result = temp.toString();
Kode diatas menghindari baik StringBuilder
dan instansiasi objek didalam loop, sehingga juga menghindari dua kali penyalinan karakter seperti yang dipaparkan diatas.
Leave a Reply