Sponsor Reklam 


04.01.2009 (22:01)

 String'ler ve StringBuffer Kullanımı 
Karakterler dizileri yerine String dediğimiz karakter katarlarını da kullanabiliriz.

Bildiğimiz üzere stringler üzerine işlemlerde stringin boyutu (length()), bir indisindeki karakteri (charAt(int)), string birleştirmeleri (concat(String)), karşılaştırma işlemleri (compareTo(String)), alt stringin elde edilmesi (substring(int, int)) ve daha pek çok işlem yapılabilmektedir.

Stringler bazı kısıtlardan dolayı değiştirilemeyen karakter katarlarıdır. Doğrudan bir karakterin silinmesi (delete) veya araya bir karakterin eklenmesi (insert) benzeri işlemler söz konusu değildir. Dolaylı yollarla bu işlemler yapılabilir fakat karakterlere referans veren stringimiz artık hafızada (memory) başka bir yerde yeni elde edilen karakter katarlarına referans verecektir.

// String'lerde bir indisteki karakterin silinmesi
String s = "abcdef";
s = s.substring(0, 2) + s.substring(3);

Bu kod ile ikinci indiste yer alan karakter 'c' silinmektedir. Aslında s karakter katarının alt karakterleri elde edilmekte, bunlar birleştirilmekte ve sonucun bulunduğu adrese s değişkeni referans vermektedir.

Eğer s'nin son halini ekrana yazdırırsak şu sonucu görürüz:
abdef

String'ler üzerine yapamadığımız işlemler için ve hafızadaki yerindeki kapasite değişiklikleri problemlerini azaltmak amacıyla StringBuffer sınıfı kullanılmaktadır.

Bu sınıfı kullanarak yine String'in boyutunu bulduğumuz gibi (length()) bu sefer kapasitesini de görebiliriz (capacity()).

Boyut ve kapasite ile ilgili şu örneğe bakalım:

package kodcu.net;

public class Main {
  public static void main(String[] args) {
    String str = "12345678";
    StringBuffer sb = new StringBuffer(str);
    // sb.ensureCapacity(100);
    int kapasite = sb.capacity();
    int boyut = sb.length();
    System.out.println("Kapasite: " + kapasite);
    System.out.println("Boyut" + boyut);
  }
}

Ekran çıktımız şu şekilde olacaktır:
Kapasite: 24
Boyut: 8

Görüldüğü gibi boyut beklediğimiz boyut çıkarken kapasite ise daha büyük çıkmıştır. StringBuffer sınıfı, yapılacak her değişikte kapasiteyi değiştirmemek için ilk seferde 16 ek karakterlik yer açmaktadır. Kapasite değişimi maliyetli bir işlemdir.

Artık insert(), delete(), deleteCharAt(int), append() gibi işlemleri yapabiliriz. Ayrıca kapasite ayırma işlemini elle (manual) de ensureCapacity(int) metodu ile yapabiliriz.

Yukarıda yer alan örnekte yorum olarak kapatılmış satırda (comment line) ensureCapacity(100) çağrısı yer almaktadır. Eğer bu satırı aktif edersek ekran çıktımız şu şekilde olur:
Kapasite: 100
Boyut: 8

Imza: admin








Yazilar kaynak gosterilmeden kopyalanamaz © www.kodcu.net // Twitter