Setir synpy
Bu synp nyşanlaryň yzygiderliligini görkezýär. "Bu setir" ýaly programmalarda kesgitlenen ähli setir söz düzümleri String synpynyň mysallarydyr. Setiriň iki esasy aýratynlygy bar:- bu üýtgewsiz synp
- bu soňky synp
final
) we döredilenden soň synpyň ýagdaýlaryny üýtgedip bolmaz immutable
. Bu String synpyna birnäçe möhüm artykmaçlygy berýär:
-
Üýtgemezlik sebäpli, String synpynyň mysalynyň hashkody keş görnüşinde saklanýar. Her gezek baha bermegiň zerurlygy ýok, sebäbi obýektiň meýdan bahalary döredilenden soň üýtgemez. Bu synpy açar hökmünde ulananyňyzda ýokary öndürijilik berýär
HashMap
. -
Setir synpy goşmaça sinhronizasiýa bolmazdan köp sapakly gurşawda ulanylyp bilner.
-
+
String synpynyň başga bir aýratynlygy , Java-daky "" operatory aşa ýüklemekdir . Şonuň üçin setirleriň birleşmegi (goşulmagy) gaty ýönekeý:
public static void main(String[] args) {
String command = "Follow" + " " + "the" + " " + "white" + " " + "rabbit";
System.out.println(command); // Follow the white rabbit
}
Kapotyň aşagynda simli birleşme StringBuilder ýa-da StringBuffer synpy (düzüjiniň islegi boýunça) we usul append
(bu sapaklar barada biraz soňrak gürleşeris) tarapyndan ýerine ýetirilýär. String synpynyň mysallaryny beýleki synplaryň mysallary bilen goşsak, ikinjisi setir şekiline çenli azalýar:
public static void main(String[] args) {
Boolean b = Boolean.TRUE;
String result = "b is " + b;
System.out.println(result); //b is true
}
Bu “String” synpynyň başga bir gyzykly aýratynlygy: islendik synpyň obýektleri toString()
synpda kesgitlenen Object
we beýleki synplara miras galan usuly ulanyp, setir şekillendirilip bilner. Köplenç obýektdäki toString () usulyna aç-açan diýilýär. Mysal üçin, ekranda bir zat görkezenimizde ýa-da başga bir synpyň obýektine setir goşanymyzda. Setir synpynyň ýene bir aýratynlygy bar. Java kodunda kesgitlenen "asdf" ýaly ähli söz sözlemleri, kompil wagtynda keş görnüşinde saklanýar we setir basseýnine goşulýar. Aşakdaky kody işleden bolsak:
String a = "Wake up, Neo";
String b = "Wake up, Neo";
System.out.println(a == b);
Konsolda hakykaty göreris , sebäbi üýtgeýjiler a
aslynda b
düzüliş wagtynda setir basseýnine goşulan String synpyna meňzeýär. .Agny, birmeňzeş gymmaty bolan synpyň dürli mysallary döredilmeýär we ýat ýatda saklanýar.
Kemçilikler:
Setir synpynyň esasan setirler bilen işlemek üçin zerurdygyny çaklamak kyn däl. Someöne käbir ýagdaýlarda String synpynyň ýokardaky aýratynlyklary artykmaçlyklardan kemçiliklere öwrülip biler. Java kodunda setirler döredilenden soň, köplenç köp amallar ýerine ýetirilýär:- setirleri dürli registrlere öwürmek;
- substrat gazyp almak;
- birleşme;
- we ş.m.
public static void main(String[] args) {
String s = " Wake up, Neo! ";
s = s.toUpperCase();
s = s.trim();
System.out.println("\"" + s + "\"");
}
Bir seretseň, ýaňy “Oýan, Neo!” Setirini terjime eden ýaly. baş harp bilen, bu setirden goşmaça boşluklary aýyrdy we sitata bilen örtdi. Aslynda, String synpynyň üýtgewsizligi sebäpli, her bir işiň netijesinde täze setir mysallary döredilýär we köne zatlary taşlanýar, köp mukdarda zibil döredýär. Memoryadyň ýitirilmeginden nädip saklanmaly?
StringBuffer synpy
String obýektine üýtgeşmeler sebäpli wagtlaýyn hapalaryň döredilmegi üçin “StringBuffer” synpyny ulanyp bilersiňiz. Bumutable
synp, ýagny üýtgedilip bilner. “StringBuffer” synpynyň obýekti belli bir usullary çagyryp, uzynlygy we gymmaty üýtgedilip bilinjek belli bir nyşan toplumyny öz içine alyp biler. Geliň, bu synpyň nähili işleýändigini göreliň. Täze obýekt döretmek üçin, gurluşykçylaryndan birini ulanyň, mysal üçin:
- StringBuffer () - boş (nyşan ýok) obýekt döreder
- StringBuffer (String str) - str üýtgeýjisine esaslanýan bir obýekt döreder (şol bir hatarda str nyşanlarynyň hemmesini öz içine alýar)
StringBuffer sb = new StringBuffer();
StringBuffer sb2 = new StringBuffer("Not empty");
Java-da StringBuffer arkaly setir birikmesi append
. Umuman aýdanyňda, “StringBuffer” synpyndaky usul, append
islendik maglumat görnüşini diýen ýaly kabul edip biljek derejede aşa ýüklenýär:
public static void main(String[] args) {
StringBuffer sb = new StringBuffer();
sb.append(new Integer(2));
sb.append("; ");
sb.append(false);
sb.append("; ");
sb.append(Arrays.asList(1,2,3));
sb.append("; ");
System.out.println(sb); // 2; false; [1, 2, 3];
}
Usul append
, “zynjyrda” çagyrylmagyna mümkinçilik berýän (beýleki usullar ýaly) atlandyrylan obýekti yzyna gaýtaryp berýär. Aboveokardaky mysaly şeýle ýazyp bolar:
public static void main(String[] args) {
StringBuffer sb = new StringBuffer();
sb.append(new Integer(2))
.append("; ")
.append(false)
.append("; ")
.append(Arrays.asList(1,2,3))
.append("; ");
System.out.println(sb); // 2; false; [1, 2, 3];
}
“StringBuffer” synpynda setirler bilen işlemek üçin birnäçe usul bar. Esasylaryny sanap geçeliň:
delete(int start, int end)
- pozisiýadan başlapstart
, soňuna çenli nyşanlaryň aşaky bölegini pozýarend
deleteCharAt(int index)
- nyşanlary pozýarindex
insert(int offset, String str)
str
- ýerinde çyzyk goýýaroffset
. Usulinsert
hem aşa ýüklenýär we dürli argumentleri alyp bilerreplace(int start, int end, String str)
- hemme nyşanlary pozisiýadanstart
pozisiýa çalyşarend
str
reverse()
- ähli nyşanlaryň tertibini tersleşdirýärsubstring(int start, int end)
start
- pozisiýadan başlap, aşaky bölegi yzyna getirerend
substring(int start)
- ýagdaýdan başlap substringi yzyna getirer
start
public static void main(String[] args) {
String numbers = "0123456789";
StringBuffer sb = new StringBuffer(numbers);
System.out.println(sb.substring(3)); // 3456789
System.out.println(sb.substring(4, 8)); // 4567
System.out.println(sb.replace(3, 5, "ABCDE")); // 012ABCDE56789
sb = new StringBuffer(numbers);
System.out.println(sb.reverse()); // 9876543210
sb.reverse(); // Return the original order
sb = new StringBuffer(numbers);
System.out.println(sb.delete(5, 9)); // 012349
System.out.println(sb.deleteCharAt(1)); // 02349
System.out.println(sb.insert(1, "One")); // 0One2349
}
Üstünlikleri:
-
Öň bellenip geçilişi ýaly, StringBuffer üýtgäp bilýän synpdyr, şonuň üçin onuň bilen işlemek String bilen deň mukdarda ýat hapalaryny döretmeýär. Şonuň üçin setirlere köp üýtgetmeler girizilen bolsa, ulanmak has gowudyr
StringBuffer
. -
StringBuffer sapak üçin ygtybarly synpdyr. Onuň usullary sinhronlaşdyrylýar we mysallar bir wagtyň özünde birnäçe sapak arkaly ulanylyp bilner.
Kemçilikler:
Bir tarapdan, sapaklaryň howpsuzlygy synpyň artykmaçlygy, beýleki tarapdan bolsa zyýany. Sinhronlaşdyrylan usullar sinhron däl usullardan has haýal. “StringBuilder” şu ýerde oýnaýar. “Java” synpynyň haýsydygyny - “StringBuilder”, haýsy usullaryň bardygyny we aýratynlyklarynyň nämedigini anyklalyň.StringBuilder synpy
Java-daky StringBuilder, nyşanlaryň yzygiderliligini görkezýän synpdyr. Sapyň howpsuzlygyndan başga hemme taraplaýyn StringBuffer-e gaty meňzeýär. StringBuilder, StringBuffer-e meňzeş API üpjün edýär. Geliň, StringBufer-den StringBuilder-e üýtgeýänleriň deklarasiýasyny çalşyp, eýýäm tanyş bir mysal ulanyp görkezeliň:public static void main(String[] args) {
String numbers = "0123456789";
StringBuilder sb = new StringBuilder(numbers);
System.out.println(sb.substring(3)); //3456789
System.out.println(sb.substring(4, 8)); //4567
System.out.println(sb.replace(3, 5, "ABCDE")); //012ABCDE56789
sb = new StringBuilder(numbers);
System.out.println(sb.reverse()); //9876543210
sb.reverse(); // Return the original order
sb = new StringBuilder(numbers);
System.out.println(sb.delete(5, 9)); //012349
System.out.println(sb.deleteCharAt(1)); //02349
System.out.println(sb.insert(1, "One")); //0One2349
}
Onlyeke-täk tapawut, StringBuffer sapaklaryň howpsuz bolmagy we ähli usullary sinhronlaşdyrylmagy, StringBuilder bolsa ýok. Bu ýeke-täk aýratynlyk. Java-da StringBuilder, usullaryň sinhronlaşmazlygy sebäpli StringBuffer-den has çalt. Şonuň üçin köp halatlarda, köp sapakly gurşawdan başga ýagdaýlarda, Java programmasy üçin StringBuilder-den peýdalanmak has gowudyr. Üç synpyň deňeşdirme tablisasynda hemme zady jemleýäris:
String vs StringBuffer vs StringBuilder
Setir | StringBuffer | StringBuilder | |
---|---|---|---|
Üýtgeýänlik | Immutable () Ok) |
mutable (Hawa) |
mutable (Hawa) |
Giňeldiş | final () Ok) |
final () Ok) |
final () Ok) |
Tekstiň howpsuzlygy | Hawa, üýtgewsizlik sebäpli | Hawa, sinhronizasiýa sebäpli | .Ok |
Haçan ulanmaly | Seýrek üýtgediljek setirler bilen işlenende | Köp sapakly gurşawda ýygy-ýygydan üýtgediljek setirler bilen işlenende | Bir sapakly gurşawda ýygy-ýygydan üýtgediljek setirler bilen işlenende |
GO TO FULL VERSION