StringBuilder and StringBuffer

Niye StringBuilder istifade etmeliyik ?
String s = "Java";
s += " is";
s += " good";

Meselen bele bir cumle duzeldirik. Normal String elan eden zaman, eslinde arxada String obyekti yaranir. Yeni,

String s = "Hamid"  -> String s = new String("Hamid");

ekvivalentdir.

Yuxardaki numuneye baxsaq,
1ci setirde "Java" deyeri ile bir obyekt,
2ci setirde " is" deyeri ile ikinci ve birleshdirilerek "Java is" deyeri ile 3cu,
3cu setirde " good" deyeri ile 4cu ve birleshdirilerek "Java is good" deyeri ile 5ci obyekt yaranir.
Bu numunede o qeder qeyri-adi gorsenmese de, bunu bir dovre daxilinde 100 defe ve ya daha chox istifade etsek, bu zaman yaddash problemi yashaya bilerik. Buna gore bu optimal kod hesab edilmir.

StringBuilder vasitesi ile bu kodu optimal hala getirmek olar.

StringBuilder s = new StringBuilder();
s.append("Java");
s.append(" is");
s.append(" good");

Bu zaman, sadece bir obyekt yaratmaqla butun String obyektlerini ona birleshdirir. String ozu eslinde arxada Char array istifade etdiyine gore, StringBuilder, hemin array-i genishlendirerek elave olunan Stringleri bura birleshdirir.

Sade yolla desek , String yaradarken, meselen :

char[] arr = {'J','a','v','a', ..... ... .. .. ,'d'};
String s0 = new String(arr);

kimi de yarada bilerik. Yeni char massivini String constructoruna gondermekle, String elde ede bilerik. StringBuilderin ishleme prinsipi de beledir.

StringBuilder la ish bitdikden sonra, yeni String obyekti yaradiriq

String result = s.toString();

StringBuffer da StringBuilder kimi eyni ishi gorur. Sadece aralarinda bir ferq var. StringBuffer-in append metodunda synchronized keyword u var.
Tutaq ki, StringBuffer obyekti globalda, static olaraq elan olunub ve bildiyimiz kimi diger class lar da bu obyekti gore bilir. Eger her hansi bir Test classindan bu obyektde her hansi String append olunarsa, eyni zamanda Test1 classindan da her hansi bir String append olunarsa, bu append sorgulari novbeye salinir. Bunu eden, hemin synchronized keyword -dur. Yeni, biz sira ile ayri ayri classlardan , "Java" " is" " good" Stringlerini append metoduna gonderirik. Lakin bu arxada biz gonderdiyimiz sira ile ishlemeye biler (Thread*). Buna gore StringBuffer dan istifade olunmasi duzgundur.

Comments

Popular posts from this blog

Validation for AZ phone numbers with RegEx in Java

Java necə işləyir, kod nədir ?

@Transactional annotation haqqinda. Cascade istifade olunmasi