JavaRush /Java блогы /Random-KK /String += String немесе StringBuilder.append(String)?
SemperAnte
Деңгей
Донецк

String += String немесе StringBuilder.append(String)?

Топта жарияланған
Бұл мақалада мен класстан append әдісі StringBuilderмен операторының айырмашылығы неде екенін қарастырып, талдап, айтып, көрсеткім келеді . Мұнда мәселе codeты оңтайландыру сияқты қолданбалы салаларда емес. +=String
String += String немесе StringBuilder.append(String)?  - 1
Иә, бұл сұраққа тереңірек бармаған адам: «Неге мен мүлдем басқа класстың жаңа an objectісін жасау арқылы += операторын ауыстыруым керек, содан кейін әдісті де шақыруым керек toString()? туралы айтып отырсыз ба?Таңдау анық, сіз нені айтып отырсыз?» және ол мүлде қателескен болар еді. Мәселелердің бірі - Stringбұл қарабайыр емес. String- Java тіліндегі кез келген басқа нысан сияқты class, және өзіңіз білетіндей, Java-да оператордың шамадан тыс жүктелуі деген ұғым жоқ (мысалы, C++-тегідей), операторлар тек қарабайырлар үшін анықталады және кез келген класс үшін біз кез келген операторды қайта анықтай алмаймыз. Сондықтан « +» және « += » операторлары Java кітапханасының өзіндік «балдақ» болып табылады және балдақ әрқашан шығынға ұшырайды. Шын мәнінде, мысықтың құйрығын тартуды тоқтатып, өлшемдерге көшейік. Міне, циклдік айнымалысы бар жолды 100 000 рет «жабыстыруға» кететін уақытты өлшейтін қарапайым бағдарлама.
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");
    }
}
Менің компьютерімде консольде 6815 мс көрсетілді. Яғни, бұл сызықты біріктіру үшін менің компьютерім 7 секундқа жуық уақытты алды. Енді оны StringBuilder бағдарламасымен ауыстырайық және тіпті әдісті toString()өлшемдерге қосамыз.
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");
    }
}
Менің компьютерім маған 10 мс айтты. Яғни, 0,01 секунд. Менің ойымша, тәжірибедегі айырмашылық өте айқын; шамамен айтқанда, ол 700 есе appendжылдам жұмыс істеді. +Бұл, ең алдымен, « » және « » өздері бірдей қосымша деп атай алатындығына байланысты +=, бірақ сонымен бірге мұндай оператордың бар екенін және оның не екенін түсіну үшін тілдің балдақтарымен ұзақ жол жүріп өтті. істеу керек (соңғы абзац болжаудан басқа ештеңе емес, мен JVM әзірлеушісі емеспін және ол жерде не және қалай екенін білмеймін). Бұл артық нысанның әрқашанда қымбатқа түспейтінінің айқын мысалы. Иә, code бірнеше жолға ұзарады, бірақ үлкен жобалардағы уақытты үнемдеу орасан болуы мүмкін. Өлшемдер тарихқа дейінгі процессоры бар кеңселік компьютерде жасалмағанына назар аударыңыз, бірақ енді шарфты әрең тартатын осы кеңсе компьютерінде қандай айырмашылық болатынын елестетіп көріңіз.
Пікірлер
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION