Dasar Java : String – Performa Penggabungan String

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.

About Reza Ervani 430 Articles
Adalah pendiri programming.rezaervani.com -

Be the first to comment

Leave a Reply

Your email address will not be published.


*


This site uses Akismet to reduce spam. Learn how your comment data is processed.