StringBuilder
Bu makalada goşundy usuly bilen synpdan operatoryň
+=
arasyndaky tapawudyň nämedigini göz öňünde tutmak, derňemek, aýtmak we görkezmek isleýärin
String
. Bu ýerde sorag kod optimizasiýasy ýaly amaly ugurlarda kän bolmaz.
Hawa, bu soraga çuňňur düşünmedik adam: “Näme üçin düýbünden başga bir synpyň täze obýektini döredip, + usulyny çalyşmaly, soňam usuly çagyrmaly
toString()
? Biz nähili optimizm? Saýlaw düşnükli, näme hakda gürleşýärsiň? " we düýbünden ýalňyş bolardy. Meseleleriň biri
String
başlangyç däl.
String
- Java-daky beýleki zatlar ýaly
class
, we bilşiňiz ýaly, Java-da operatoryň artykmaç ýüklenmegi ýaly zat ýok (mysal üçin C ++ bolşy ýaly), operatorlar diňe başlangyçlar üçin kesgitlenýär we islendik synp üçin haýsydyr bir operatory ýok edip bilmeris.
+
Şol sebäpli " " we " =" operatorlar
+
Java kitaphanasynyň bir görnüşi bolup, bir taýak elmydama ýitgi çekýär. Aslynda, geliň, pişigiň guýrugyny çekmegi bes edeliň we ölçeglere geçeliň. Ine, ýönekeý bir programma, 100,000 gezek aýlawly üýtgeýän çyzyk bilen “ýelimlemek” üçin wagt sarp edýär.
public class MainClass
{
private static long time;
public static void main(String[] args)
{
saveTime();
String s = "Hello";
for(int i = 0; i < 100000; ++i)
{
s+=i;
}
printDiff();
}
private static void saveTime()
{
time = System.currentTimeMillis();
}
private static void printDiff()
{
System.out.println((System.currentTimeMillis() - time) + "ms");
}
}
Kompýuterimde konsolda 6815 metr görkezildi. Thisagny, bu setiri birleşdirmek üçin kompýuterime 7 sekunt töweregi wagt gerekdi. Indi ony StringBuilder bilen çalyşalyň we hatda usuly
toString()
ölçeglere goşalyň.
public class MainClass
{
private static long time;
public static void main(String[] args)
{
saveTime();
StringBuilder sb = new StringBuilder("Hello");
for(int i = 0; i < 100000; ++i)
{
sb.append(i);
}
String s = sb.toString();
printDiff();
}
private static void saveTime()
{
time = System.currentTimeMillis();
}
private static void printDiff()
{
System.out.println((System.currentTimeMillis() - time) + "ms");
}
}
Kompýuterim maňa 10ms aýtdy. .Agny, 0.01 sekunt. Meniň pikirimçe, iş ýüzündäki tapawut gaty aç-açan; takmynan 700 esse
append
çalt işledi. Munuň sebäbi, ""
+
"we" "
+=
" özleriniň bir goşundy diýip atlandyryp bilmekleri bilen baglanyşykly, ýöne şol bir wagtyň özünde şeýle operatoryň bardygyna we nämäniň bardygyna düşünmek üçin diliň gysgyçlaryndan uzak ýol geçdi. etmeli (soňky abzas çaklamadan başga zat däl, men JVM dörediji däl we ol ýerde näme we nädip bilemok). Bu goşmaça obýektiň hemişe gymmat düşmeýändiginiň aýdyň mysalydyr. Hawa, kod iki setir uzyn bolar, ýöne uly taslamalarda wagt tygşytlamak gaty uly bolup biler. Ölçegleriň taryhdan öňki prosessorly ofis kompýuterinde edilmändigini ýadyňyzdan çykarmaň, ýöne şarfy çekip bilmeýän bu ofis kompýuterinde nähili üýtgeşiklik döredjekdigini göz öňüne getiriň.
GO TO FULL VERSION