Ik heb een Java-programma geschreven waarin ik een string moet toevoegen
" u13a2"
naar een bestaande "u1234 u12de u1386 ... u15a3"
.
Dus geleidelijk aan wordt de snaar steeds langer. Ik merkte dat de tijd die aan elke toevoeging wordt besteed, ook steeds langer wordt. Is er een manier waarop we dit tot op zekere hoogte kunnen verbeteren?
De implementatie die in me opkwam, omvat:
unicodeArray += " "+unicode;
of
unicodeArray = unicodeArray.concat(" "+unicode);
Ze gaven vergelijkbare prestaties. Ik denk dat de belangrijkste reden voor deze slechte prestaties het speciale type String
is. Het creëert een nieuw object voor elke opdracht. Als jij dat ook denkt, betekent dit dan dat ik beter een ander type kan gebruiken, zoals byte-array?
Antwoord 1, autoriteit 100%
Gebruik de klasse StringBuilder
. Het is efficiënter in wat u probeert te doen.
Antwoord 2, autoriteit 99%
U moet de StringBuilderklas.
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append("Some text");
stringBuilder.append("Some text");
stringBuilder.append("Some text");
String finalString = stringBuilder.toString();
Ga daarnaast naar:
- “Hoe Java de code optimaliseert met StringBuilder?”
- “StringBuilder vs String-aaneenschakeling in toString() in Java”
Antwoord 3, autoriteit 24%
U kunt hiervoor StringBuffer
of StringBuilder
gebruiken. Beide zijn voor dynamische snaarmanipulatie. StringBuffer
is thread-safe waar StringBuilder
dat niet is.
Gebruik StringBuffer
in een omgeving met meerdere threads. Maar als het single threaded is StringBuilder
aanbevolen en het is veel sneller dan StringBuffer
.
Antwoord 4, autoriteit 6%
–Elke keer dat u het toevoegt of er wijzigingen aan aanbrengt, wordt een nieuw String
-object gemaakt.
–Gebruik dus de append()
-methode van StringBuilder
(Als threadveiligheid nietbelangrijk is), anders gebruik StringBuffer
(Als threadveiligheid isbelangrijk.), is dat een efficiënte manier om dit te doen.
Antwoord 5
java.lang.StringBuilder. Gebruik de constructor int om een begingrootte te maken.