Ing artikel iki, Aku kaya nimbang, njelasno, marang lan nuduhake apa prabédan antarane cara append saka kelas
Ya, wong sing mesthi ora ngerti pitakonan iki bakal ujar: "Yagene aku kudu ngganti operator += kanthi nggawe obyek anyar saka kelas sing beda-beda, banjur nelpon cara kasebut uga
StringBuilder
lan operator +=
kanggo String
. Ing kene pitakonan bakal ora akeh ing area aplikasi kaya ing optimasi kode.
toString()
? Apa jenis optimalitas kita. ngomong apa? Pilihan wis jelas, sampeyan ngomong apa?" lan dheweke bakal salah. Salah sawijining masalah yaiku String
ora primitif. String
- obyek kaya liyane class
ing Jawa, lan sing ngerti, ing Jawa ora ana operator overloading (Kaya ing C ++, contone,), operator ditetepake mung kanggo primitif, lan kanggo kelas sembarang kita ora bisa ngalahake operator sembarang. Pramila operator " +
" lan " +
=" minangka jinis "kruk" perpustakaan Jawa, lan kruk tansah ngalami kerugian. Bener, ayo mandheg narik buntut kucing lan pindhah menyang pangukuran. Punika program prasaja sing ngukur wektu kanggo "lem" baris karo variabel daur ulang 100.000 kaping.
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");
}
}
Ing komputer, 6815ms ditampilake ing console. Yaiku, komputerku meh 7 detik kanggo nggawe garis iki. Saiki ayo ngganti karo StringBuilder lan malah kalebu metode toString()
ing pangukuran.
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");
}
}
PCku ngandhani 10ms. Yaiku, 0,01 Detik. Aku mikir prabédan ing praktik cukup jelas; kira-kira, kerjane 700 kaping append
luwih cepet. Iki amarga kasunyatan sing paling kamungkinan " +
" lan " +=
" piyambak bisa nelpon append padha, nanging ing wektu sing padha wis liwat dalan dawa liwat crutches basa kanggo ngerti sing operator kuwi malah ana lan apa iku. kudu nindakake (paragraf pungkasan ora luwih saka guess, Aku ora pangembang JVM lan aku ora ngerti apa ana lan carane). Iki minangka conto sing jelas babagan kasunyatan manawa obyek ekstra ora mesthi larang. Ya, kode kasebut bakal dadi sawetara baris maneh, nanging irit wektu ing proyek gedhe bisa dadi kolosal. Wigati dimangerteni manawa pangukuran kasebut ora digawe ing PC kantor kanthi prosesor prasejarah, nanging saiki bayangake apa bedane sing bakal ditindakake ing komputer kantor iki, sing meh ora bisa narik selendang.
GO TO FULL VERSION