Java – StringBuilder

StringBuilder Nasıl Kullanılır Bilmiyorsanız

Şu kötü alışkanlığınızı bırakın.. Her şeye String kullanmayın. Ekleme çıkarma işlemlerini çok daha verimli şekilde yapabilirsiniz.

Sahne 1: Normal coder… String objesini kullanıyor.
String s=”Merhaba”;
s=s+” Yabancı”;
System.out.println(s);

Tamam, böyleyken istediğiniz şeyi yapar. Ama arkadaş, biraz farklı düşünelim, performansı yüksek bir kod yazalım.

Sahne 2:
StringBuilder sb= new StringBuilder(“Merhaba”);
sb.append(” Yabancı”);
System.out.println(sb);

Bu kadar… Siz yine “Merhaba Yabancı”nızı aldınız ama çok daha verimli bir şekilde…

Stringler iyidir. Kullanılabilir ama StringBuilder her şeyi çok daha kolaylaştırabilir. En altta bununla alakalı bir örnek kod göreceksiniz.

Uzunluk ve kapasite:
StringBuilder’da, String’de olduğu gibi length() metodu vardır. String’den farklı olarak, StringBuilder’da kapasite de vardır. capacity(); metodu çağrılarak görülebilir. Kapasite, uzunluktan büyük veya uzunluğa eşittir. Gerekli olduğu yerde kapasite, otomatik olarak büyütülür.

Constructor’ları inceleyelim.

Örneğin,

// 16 Kapasiteli boş bir Builder
StringBuilder sb = new StringBuilder();
// Bu Builder’ın ilk 9 karakterine “Selamlar!” yazdık.
sb.append(“Selamlar!”);
Oluşan StringBuilder şu şekildedir.

Uzunluk ve Kapasite Metodları

StringBuilder Metodları
Prensip olarak String’de bulunmayıp StringBuilder’da olan metodlar: append() ve insert() metodlarıdır.
Gerçi sadece bunlar değil, reverse(), replace() vs. de yok String’de.

ÖRNEK:

StringDemo programı bir stringi ters çevirmeye yarıyor.
Fakat bunun yerine StringBuilder kullanılsaydı her şey çok daha kolay olacaktı.

Output:


Kodu anlatalım:
ilk for döngüsünde, stringimizi bir char dizisinde saklıyoruz.
ikinci for döngüsüyle bu char dizisinin tersini başka bir char dizisine kaydediyoruz.
reversePalindrome Stringine de bu char dizisini vererek String oluşturuyoruz.

Eğer aynı işlemi StringBuilder ile yapacak olsaydık:

Kullanacaktık ve bu da aynı output’u oluşturacaktı.

println içine sb yazdığımızı farketmişsinizdir:
System.out.println(sb);
çünkü sb.toString() , println() metodu içinde otomatik olarak çağrılır.

Bu bir performans problemi, değil mi?

söylemini biraz daha açıklayalım.

Olay sadece genişleyebilirlik sorunu değil.
C dilinde “String” diye bir veri tipi yok.
char[] kullanılır. Tersten, düzden her şekilde ulaşılması kolaydır.
Veya, şöyle bakalım. Append ile string’in concat’ını karşılaştıralım.

Aynı kodda END=50000; yaptığımızda :


sonuçta oluşan devasa bir fark var gördüğünüz üzere.

Bunun yanısıra, StringBuilder’da insert ve replace mevcut.(Bunların hepsinin, stringin içindeki data member’ın char[] olması sayesinde olabileceğini söylüyorum, yani immutable olmasa…).

Java String’inde replace veya insert yapmak için, 2adet substring metod çağımanız ve bunları son olarak bir concat. ile birleştirmeniz lazım.
Bu da yukarıdaki resmin sonuçlarını düşünmemizi sağlayan bir başka yön.

Son olarak da şöyle düşünelim:
C dilinde char[] kullandığınızda stringin sonunu istediğiniz zaman bir karaktere ’’ veya ’0’ değeri vererek getirebilirsiniz.
StringBuilder’da setLength ile bu istediğimiz işi yapabiliyoruz.
String class’ında ben böyle bir özellik bilmiyorum.(Siz biliyorsanız öğrenmekten mutluluk duyarım.)

Sanırım yeterli olmuştur.

Advertisements

4 thoughts on “Java – StringBuilder

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s