Hoe voeg je in Java efficiënter een string toe?

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 Stringis. 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:


Antwoord 3, autoriteit 24%

U kunt hiervoor StringBufferof StringBuildergebruiken. Beide zijn voor dynamische snaarmanipulatie. StringBufferis thread-safe waar StringBuilderdat niet is.

Gebruik StringBufferin een omgeving met meerdere threads. Maar als het single threaded is StringBuilderaanbevolen 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.

Other episodes