Arbeiten mit primitiven Arrays
In den vorherigen Schritten haben wir mit Arrays von Referenztypen (String) gearbeitet. Java-Arrays können jedoch auch primitive Typen wie int
, double
usw. enthalten. Die Konvertierung von primitiven Arrays in Listen erfordert zusätzliche Schritte, da Java-Generics nur mit Referenztypen funktionieren.
Lassen Sie uns ein neues Beispiel erstellen, um diesen Prozess zu demonstrieren.
Erstellen einer neuen Java-Datei
-
Erstellen Sie eine neue Java-Datei namens PrimitiveArrayToList.java
im selben Verzeichnis:
Navigieren Sie in der WebIDE zu project/src/main/java
, klicken Sie mit der rechten Maustaste und wählen Sie "New File". Nennen Sie sie PrimitiveArrayToList.java
.
-
Fügen Sie der Datei den folgenden Code hinzu:
import java.util.Arrays;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
public class PrimitiveArrayToList {
public static void main(String[] args) {
System.out.println("Converting Primitive Arrays to Lists");
System.out.println("===================================");
// Create a primitive int array
int[] numbersArray = {10, 20, 30, 40, 50};
System.out.println("Original primitive array: " + Arrays.toString(numbersArray));
// Method 1: Manual conversion
System.out.println("\nMethod 1: Manual conversion");
List<Integer> numbersList1 = new ArrayList<>();
for (int number : numbersArray) {
numbersList1.add(number); // Autoboxing converts int to Integer
}
System.out.println("List after manual conversion: " + numbersList1);
// Method 2: Using Java 8 Streams
System.out.println("\nMethod 2: Using Java 8 Streams");
List<Integer> numbersList2 = Arrays.stream(numbersArray)
.boxed() // Converts IntStream to Stream<Integer>
.collect(Collectors.toList());
System.out.println("List after stream conversion: " + numbersList2);
// Modify the lists to demonstrate independence from the array
System.out.println("\nModifying the lists:");
numbersList1.add(60);
numbersList1.set(0, 15);
numbersList2.add(70);
numbersList2.remove(0);
System.out.println("List 1 after modifications: " + numbersList1);
System.out.println("List 2 after modifications: " + numbersList2);
System.out.println("Original array after List modifications: " + Arrays.toString(numbersArray));
// Create and convert other primitive type arrays
System.out.println("\nOther primitive type examples:");
double[] doubleArray = {1.1, 2.2, 3.3, 4.4, 5.5};
List<Double> doubleList = Arrays.stream(doubleArray)
.boxed()
.collect(Collectors.toList());
System.out.println("Double array: " + Arrays.toString(doubleArray));
System.out.println("Double list: " + doubleList);
boolean[] boolArray = {true, false, true, true, false};
List<Boolean> boolList = new ArrayList<>();
for (boolean value : boolArray) {
boolList.add(value);
}
System.out.println("Boolean array: " + Arrays.toString(boolArray));
System.out.println("Boolean list: " + boolList);
}
}
- Kompilieren und führen Sie das Programm aus:
cd ~/project
javac src/main/java/PrimitiveArrayToList.java
java -cp src/main/java PrimitiveArrayToList
Sie sollten eine Ausgabe ähnlich dieser sehen:
Converting Primitive Arrays to Lists
===================================
Original primitive array: [10, 20, 30, 40, 50]
Method 1: Manual conversion
List after manual conversion: [10, 20, 30, 40, 50]
Method 2: Using Java 8 Streams
List after stream conversion: [10, 20, 30, 40, 50]
Modifying the lists:
List 1 after modifications: [15, 20, 30, 40, 50, 60]
List 2 after modifications: [20, 30, 40, 50, 70]
Original array after List modifications: [10, 20, 30, 40, 50]
Other primitive type examples:
Double array: [1.1, 2.2, 3.3, 4.4, 5.5]
Double list: [1.1, 2.2, 3.3, 4.4, 5.5]
Boolean array: [true, false, true, true, false]
Boolean list: [true, false, true, true, false]
Verständnis der Konvertierung primitiver Arrays
Bei der Arbeit mit primitiven Arrays sind zwei wichtige Aspekte zu berücksichtigen:
-
Autoboxing: Java konvertiert primitive Werte automatisch in ihre Wrapper-Klassenobjekte, wenn sie zu Sammlungen hinzugefügt werden. Zum Beispiel wird int
in Integer
konvertiert.
-
Boxing-Methoden für Streams: Bei der Verwendung von Streams mit primitiven Arrays müssen Sie die Methode .boxed()
aufrufen, um primitive Streams in Objekt-Streams zu konvertieren.
Der Konvertierungsprozess erstellt völlig neue Listen, die unabhängig von den ursprünglichen Arrays sind. Das bedeutet:
- Das Ändern der Liste hat keine Auswirkungen auf das ursprüngliche Array
- Die Listen sind vollständig veränderlich (Sie können Elemente hinzufügen, entfernen oder ändern)
- Jedes Element in der Liste ist ein neues Objekt (Wrapper), das den Wert aus dem Array enthält
Diese Unabhängigkeit ist besonders nützlich, wenn Sie die Daten manipulieren müssen, ohne Änderungen am ursprünglichen Array zu riskieren.