Java List initiering i en rad
översikt
i denna snabba handledning kommer vi att undersöka hur man initierar en lista med hjälp av one-liners.
ytterligare läsning:
Samlingar.emptyList () vs. New List Instance
Guide till Java ArrayList
skapa från en Array
Vi kan skapa en lista från en array. Och tack vare array literals kan vi initiera dem i en rad:
Vi kan lita på varargs-mekanismen för att hantera matrisskapandet. Med det kan vi skriva mer kortfattad och läsbar kod:
resultatinstansen för den här koden implementerar Listgränssnittet, men det är inte en java.util.,ArrayList eller en länkad lista. Istället är det en lista som stöds av den ursprungliga matrisen, som har två konsekvenser som vi kommer att titta på i resten av det här avsnittet.
även om klassens namn råkar vara ArrayList är det i java.util.Matriser paket.
2.1. Fast storlek
resultatinstansen från arrayer.asList kommer att ha en fast storlek:
2.2. Delad referens
den ursprungliga matrisen och listan delar samma referenser till objekten:
skapa från en ström (Java 8)
Vi kan enkelt konvertera en ström till någon form av samling.,
därför kan vi med fabriksmetoderna för strömmar skapa och initiera listor i en rad:
Vi bör notera här att samlare.toList () garanterar inte det exakta genomförandet av den returnerade listan.
det finns inget allmänt kontrakt om mutabiliteten, serialiserbarheten eller trådsäkerheten i den returnerade instansen. Så, vår kod borde inte förlita sig på någon av dessa egenskaper.
vissa källor markerar den strömmen.av(…).samla ( … ) kan ha ett större minne och prestanda fotavtryck än matriser.asList()., Men i nästan alla fall är det en sådan mikrooptimering att det finns liten skillnad.
Fabriksmetoder (Java 9)
JDK 9 introducerar flera praktiska fabriksmetoder för samlingar:
en viktig detalj är att de returnerade instanserna är oföränderliga. Utöver det har fabriksmetoderna flera fördelar inom rymdeffektivitet och trådsäkerhet.
det här ämnet utforskas mer i den här artikeln.,
initiering av Dubbelstag
på flera ställen kan vi hitta en metod som kallas initiering av dubbelstag, vilket ser ut så här:
namnet ”initiering av dubbelstag” är ganska vilseledande. Medan syntaxen kan se kompakt och elegant, döljer den farligt vad som händer under huven.
det finns inte faktiskt ett syntaxelement med dubbel stag i Java; de är två block som formaterats avsiktligt på detta sätt.
med de yttre hängslen, förklarar vi en anonym inre klass som kommer att vara en underklass av ArrayList., Vi kan förklara detaljerna i vår underklass inuti dessa hängslen.
som vanligt kan vi använda instansinitieringsblock, och det är där det inre paret av hängslen kommer ifrån.
kortheten i denna syntax är frestande. Det anses dock vara ett anti-mönster.
för att läsa mer om dubbelstag initiering, ta en titt på vår artikel här.
slutsats
Modern Java erbjuder flera alternativ för att skapa en samling i en rad. Metoden vi väljer är nästan helt ner till personlig preferens snarare än teknisk resonemang.,
en viktig takeaway är att även om det ser graciöst ut, har anti-mönstret för anonym inre klassinitiering (aka double brace) många negativa biverkningar.
som alltid är koden tillgänglig över på GitHub.
Kom igång med Spring 5 och Spring Boot 2, genom Learn Spring course:
>> kolla in kursen