Hur man sammanfogar två listor i Java?

Hur man sammanfogar två listor i Java

Java tillhandahåller ett brett utbud av metoder och tekniker för att manipulera och hantera listor. Att sammanfoga två eller flera listor är en vanlig uppgift som uppstår i olika sammanhang. Den här omfattande guiden kommer att illustrera olika sätt att sammanfoga två listor i Java, tillsammans med tydliga kodfragment och förklaringar.

Verktyg för att sammanfoga listor i Java

Java erbjuder flera verktyg för att sammanfoga listor:

Collections.addAll()-metoden
List.addAll()-metoden
Stream.concat()-metoden
Collectors.toList()-metoden

Metoder för att sammanfoga listor

1. Collections.addAll()-metoden

Den statiska Collections.addAll()-metoden tar en målsamling och en eller flera källlistor som indata och lägger till elementen i källlistorna till målsamlingen.

java
import java.util.ArrayList;
import java.util.Collections;

public class Exempel1 {

public static void main(String[] args) {
ArrayList<Integer> lista1 = new ArrayList<>();
lista1.add(1);
lista1.add(2);
lista1.add(3);

ArrayList<Integer> lista2 = new ArrayList<>();
lista2.add(4);
lista2.add(5);
lista2.add(6);

// Sammanfoga lista2 till lista1
Collections.addAll(lista1, lista2);

System.out.println(lista1); // Skriver ut [1, 2, 3, 4, 5, 6]
}
}

2. List.addAll()-metoden

List.addAll()-metoden, som finns i java.util.List-gränssnittet, fungerar på samma sätt som Collections.addAll(). Den lägger till elementen i en angiven källlista till slutet av den anropande listan.

java
import java.util.ArrayList;

public class Exempel2 {

public static void main(String[] args) {
ArrayList<Integer> lista1 = new ArrayList<>();
lista1.add(1);
lista1.add(2);
lista1.add(3);

ArrayList<Integer> lista2 = new ArrayList<>();
lista2.add(4);
lista2.add(5);
lista2.add(6);

// Sammanfoga lista2 till lista1
lista1.addAll(lista2);

System.out.println(lista1); // Skriver ut [1, 2, 3, 4, 5, 6]
}
}

3. Stream.concat()-metoden

Java 8 introducerade Stream-API, som tillhandahåller en funktionell metod som heter concat(). Den här metoden tar två strömmar som indata och returnerar en ny ström som innehåller elementen från båda strömmarna.

java
import java.util.ArrayList;
import java.util.stream.Collectors;
import java.util.stream.Stream;

public class Exempel3 {

public static void main(String[] args) {
ArrayList<Integer> lista1 = new ArrayList<>();
lista1.add(1);
lista1.add(2);
lista1.add(3);

ArrayList<Integer> lista2 = new ArrayList<>();
lista2.add(4);
lista2.add(5);
lista2.add(6);

// Konvertera listorna till strömmar
Stream<Integer> ström1 = lista1.stream();
Stream<Integer> ström2 = lista2.stream();

// Sammanfoga strömmarna och konvertera dem tillbaka till en lista
ArrayList<Integer> sammanfogadLista = ström1.concat(ström2).collect(Collectors.toList());

System.out.println(sammanfogadLista); // Skriver ut [1, 2, 3, 4, 5, 6]
}
}

4. Collectors.toList()-metoden

Collectors.toList()-metoden, som ingår i java.util.stream.Collectors-klassen, kan användas tillsammans med Stream.concat() för att sammanfoga listor. Den här metoden konverterar en ström till en lista.

java
import java.util.ArrayList;
import java.util.stream.Collectors;
import java.util.stream.Stream;

public class Exempel4 {

public static void main(String[] args) {
ArrayList<Integer> lista1 = new ArrayList<>();
lista1.add(1);
lista1.add(2);
lista1.add(3);

ArrayList<Integer> lista2 = new ArrayList<>();
lista2.add(4);
lista2.add(5);
lista2.add(6);

// Konvertera listorna till strömmar
Stream<Integer> ström1 = lista1.stream();
Stream<Integer> ström2 = lista2.stream();

// Sammanfoga strömmarna
Stream<Integer> sammanfogadStröm = ström1.concat(ström2);

// Konvertera den sammanfogade strömmen till en lista
ArrayList<Integer> sammanfogadLista = sammanfogadStröm.collect(Collectors.toList());

System.out.println(sammanfogadLista); // Skriver ut [1, 2, 3, 4, 5, 6]
}
}

Slutsats

Att sammanfoga två eller flera listor i Java är en enkel uppgift med hjälp av de verktyg och metoder som tillhandahålls i språket. Beroende på dina specifika behov och preferenser kan du välja den metod som bäst passar dina krav. Varje metod ger sina unika fördelar och nackdelar, så det är viktigt att överväga dessa när du gör ditt val.

Genom att förstå och implementera dessa metoder effektivt kan du enkelt hantera listor och manipulera data i Java-program.

Vanliga frågor

1. Vilken metod är mest effektiv för att sammanfoga stora listor?

Stream.concat()-metoden är i allmänhet den mest effektiva metoden för att sammanfoga stora listor, eftersom den använder en lat evalueringsstrategi som undviker att skapa onödiga mellanliggande samlingar.

2. Kan jag sammanfoga listor med olika typer av element?

Ja, du kan sammanfoga listor med olika typer av element, förutsatt att de implementerar samma gränssnitt (t.ex. List).

3. Vad händer om jag sammanfogar två listor som innehåller duplicerade element?

Duplicerade element kommer att förekomma i den sammanfogade listan. Om du vill ta bort duplicerade element kan du använda Set-gränssnittet eller metoder som distinct() i Stream-API.

4. Kan jag sammanfoga en lista med en array?

Ja, du kan sammanfoga en lista med en array genom att konvertera arrayen till en lista med hjälp av Arrays.asList()-metoden.

5. Kan jag lägga till en enskild uppgift i slutet av en lista utan att använda addAll()-metoden?

Ja, du kan lägga till en enskild uppgift i slutet av en lista med hjälp av add()-metoden i List-gränssnittet.

6. Kan jag använda Stream.concat() för att sammanfoga strömmar av olika typer?

Nej, Stream.concat() kan endast sammanfoga strömmar av samma typ. Om du vill sammanfoga strömmar av olika typer måste du först konvertera dem till en gemensam supertyp.

7. Vad är skillnaden mellan addAll()-metoden i Collections och List-gränssnittet?

Collections.addAll()-metoden är en statisk metod som kan användas för att lägga till element till vilken samling som helst, medan List.addAll()-metoden är en instansmetod som endast kan användas för att lägga till element till en lista.

8. Kan jag sammanfoga tomma listor?

Ja, du kan sammanfoga tomma listor, och den sammanfogade listan kommer också att vara tom.