initiera lista i Java i en enda rad

i det här inlägget kommer vi att diskutera olika metoder för att initiera lista i Java i en enda rad.

Java kritiseras ofta för sin verbositet.,structing it, storing it in a variable, invoking add() method on it n times, and then maybe wrapping it to make it unmodifiable:

1
2
3
4
5
6
7

List<String> list = new ArrayList<>();
list.,Lägg till (”C”);
lista.Lägg till (”C++”);
lista.Lägg till (”Java”);
list = Samlingar.unmodifiableList (list);

i det här inlägget kommer vi att diskutera olika metoder för att initiera listan i ett enda uttryck.

matriser.asList ()

Arrays.asList() returnerar en lista med fast storlek som stöds av den angivna matrisen. Eftersom en array inte kan modifieras strukturellt är det inte möjligt att lägga till element i listan eller ta bort element från den., The list will throw an UnsupportedOperationException if any resize operation is performed on it.

1
List<String> fixedLengthList = Arrays.,asList(”C”, ”C++”, ”Java”);

If we need a List that can expand or shrink, we can use –

1
List<String> list = new ArrayList<>(Arrays.,asList(”C”, ”C++”, ”Java”));

Java Samlingar

Collections class består av flera statiska metoder som fungerar på samlingar och returnerar en ny samling backas upp av en viss samling.

samlingar.addAll ()

Collections.addAll() lägger till alla angivna element i den angivna samlingen. Element som ska läggas till kan anges individuellt eller som en matris., When elements are specified individually, this method provides a convenient way to add a few elements to an existing collection:

1
2

List<String> list = Collections.EMPTY_LIST;
Collections.,addAll(list = new ArrayList<String>(), ”C”, ”C++”, ”Java”);

Samlingar.omodifiablelist ()

Alternativt kan man fylla i en samling med en kopieringskonstruktor från en annan samling. En sådan metod är Collections.unmodifiableList() returnerar en omodifierad vy av den angivna listan. Alla försök att ändra den returnerade listan kommer att resultera i en UnsupportedOperationException.

samlingar.,singletonList ()

om vi vill ha en lista som bara innehåller ett enda element kan vi använda Collections.singletonList() som returnerar en oföränderlig lista som innehåller det elementet. Listan kommer att kasta en UnsupportedOperationException om någon modifiering utförs på den.

1
lista<string> list = collections.,singletonList(”Java”);

Dubbel Brace initiering

ett annat alternativ är att använda ”dubbel Brace initiering”. Detta skapar en anonym inre klass med bara en instans initierare i den. Denna teknik bör bäst undvikas eftersom det kostar en extra klass vid varje användning och det innehåller också dolda referenser till den inneslutande instansen och till alla fångade objekt. Detta kan orsaka minnesläckor eller problem med serialisering.,v>2

3
4
5
lista<String> lista = ny ArrayList<String> lista=ny ArrayList < String > () {{
lägg till (”C”);
lägg till (”C++”);
lägg till (”Java”);
};

Java 8

Java 8 stream API kan användas för att konstruera små listor genom att få ström från statiska fabriksmetoder och ackumulera inmatningselementen i en ny lista med samlare., For example,

⮚ Collectors.toList()

Collectors.toList() returns a Collector that accumulates the input elements into a new List.

1
2

List<String> list = Stream.of(”C”, ”C++”, ”Java”)
.collect(Collectors.toList());

⮚ Collectors.,toCollection()

The streams collectors make no guarantee on the type of the List returned by toList(). To ensure the returned List is ArrayList, we can use toCollection(Supplier) as shown below:

1
2

List<String> list = Stream.,av (”C”,” C++”,” Java”)
.samla (samlare.toCollection (ArrayList::new));

samlare.samlingoch därefter ()

vi kunde anpassa en samlare för att utföra en ytterligare efterbehandling omvandling., Till exempel kan vi anpassa toList() – samlaren för att alltid skapa en omodifierbar lista med:

Java 9

Java 9 gjorde det bekvämt att skapa instanser av lista med små antal element genom att tillhandahålla Lists.of() statiska fabriksmetoder som skapar kompakta, oföränderliga instanser av det., For example,

1
List<String> unmodifiableList = List.of(”C”, ”C++”, ”Java”);

Java 9 provides 12 overloaded versions of this method –

Note there is a var-args version which can handle any number of elements., Nu är den uppenbara frågan varför Java 9 har inkluderat så många extra metoder när endast var-args kan räcka? Anledningen är att det finns en subtil runtime prestanda fördel. Var-args-versionen kommer sannolikt att köras långsammare än de överladdningar som inte använder varargs. Detta beror på att varje anrop av en varargs metod kommer att orsaka en array allokering och initiering och inte glömma GC overhead.

enligt Javadoc har Listinstanserna som skapats avList.of() följande egenskaper:

  1. de är strukturellt oföränderliga., Element kan inte läggas till, tas bort eller ersättas. Att anropa någon mutatormetod kommer alltid att orsaka attUnsupportedOperationException kastas. Om de inneslutna elementen själva är muterbara kan det dock leda till att listans innehåll verkar förändras.
  2. de tillåter null element. Försök att skapa dem med null-element resulterar i NullPointerException.
  3. de är serialiserbara om alla element är serialiserbara.
  4. ordningen på element i listan är densamma som ordningen på de angivna argumenten, eller av elementen i den angivna matrisen.,
  5. de är värdebaserade. Uppringare bör inte göra några antaganden om identiteten på de returnerade instanserna. Fabriker är fria att skapa nya instanser eller återanvända befintliga. Därför är identitetskänsliga operationer på dessa instanser (reference equality ( = = ), identity hash code och synkronisering) opålitliga och bör undvikas.,

If we need a List that can expand or shrink, we can use –

1
List<String> list = new ArrayList<>(List.,(”C”, ”C++”,”Java”));

Observera att till skillnad från statiska metoder på klasser är statiska metoder på gränssnitt inte ärvda, så det kommer inte att vara möjligt att åberopa dem via en implementeringsklass eller via en instans av gränssnittstypen.

Guava

Guava tillhandahåller också flera statiska verktygsmetoder som gäller Listinstanser.,

initiera lista med Guava i Java

Apache Commons Collections

Apache Commons CollectionsListUtils klassen gerunmodifiableList() som returnerar en omodifierbar lista som stöds av den angivna listan. Det kastar en NullPointerException om den angivna listan är null och en UnsupportedOperationException om någon modifiering utförs på den.

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *