Was ist ein Array?
- Array ist eine Sammlung von Elementen, die jeweils durch einen Index oder Schlüssel identifiziert werden.
- Arrays haben eine feste und dynamische Größe
- Homogene Elemente → alle Elemente in einem Array sind vom gleichen Datentyp.
- Heterogene Elemente → ermöglichen unterschiedliche Datentypen im selben Array.
// Homogeneous
int[] intArray = new int[5]; // Array of integers String[]
stringArray = new String[5]; // Array of strings
// Heterogeneous
mixedArray = [1, "hello", 3.14, True] # Mixed data types in one list
Eigenschaften von Arrays
- Indizierung: Nullbasierte Indizierung in den meisten Programmiersprachen.
- Größe: Feste Größe (statisch), kann nicht dynamisch geändert werden (außer in Sprachen mit dynamischen Arrays).
- Speicherzuweisung: Kontinuierliche Speicherzuweisung für Array-Elemente. Das bedeutet, dass sich jedes Element im Speicher direkt neben dem vorherigen befindet. Dies ist möglich, weil alle Elemente die gleiche Größe haben, sodass das System die Speicheradresse jedes Elements anhand seines Index berechnen kann.

Array-Operationen
- Einfügung: Beinhaltet typischerweise das Verschieben von Elementen, O(n)-Zeitkomplexität.
- Löschen: Ähnlich wie beim Einfügen müssen Elemente möglicherweise verschoben werden. Außer letzter Index
- Traversal: Durchlaufen aller Elemente, O(n)-Zeitkomplexität.
- Zugriffszeit: O(1) Zeitkomplexität für den Zugriff auf ein Element mithilfe seines Index.
Arten von Arrays
- Eindimensionales Array: Einfachste Form, wie eine Liste.
- Mehrdimensionales Array: Arrays von Arrays (z. B. 2D-Array).
- Jagged Array: Arrays mit unterschiedlichen Längen von Unterarrays.
- Dynamische Arrays (z. B. ArrayList in Java): Arrays, deren Größe dynamisch wachsen kann.
Vorteile von Arrays
- Effizienz: O(1) Zugriffszeit für Elemente.
- Speichernutzung: Effiziente Speichernutzung durch zusammenhängenden Speicher.
- Benutzerfreundlichkeit: Vereinfacht die Datenverwaltung und Vorgänge wie Sortieren und Suchen
Nachteile von Arrays
- Feste Größe: Die einmal deklarierte Größe kann nicht geändert werden. außer dynamisches Array
- Einfüge-/Löschkosten: O(n) für das Einfügen oder Löschen eines Elements, insbesondere in der Mitte.
- Speicherverschwendung: Ungenutzte Elemente belegen weiterhin Speicherplatz.
Reale Anwendungen von Arrays
- Speichern von Daten: Häufig in der Programmierung zum Speichern von Elementsammlungen.
- Sortieralgorithmen: Viele Sortieralgorithmen sind für Arrays konzipiert (z. B. QuickSort, MergeSort).
- Matrixoperationen: 2D-Arrays werden für Matrixoperationen in Mathematik und Grafik verwendet.
- Stapel und Warteschlangen implementieren: Grundlegende Datenstrukturen können mithilfe von Arrays implementiert werden.
Best Practices mit Arrays
- Unnötige Kopien vermeiden: Achten Sie auf Vorgänge, die das Kopieren von Elementen erfordern.
- Verwenden Sie bei Bedarf dynamische Arrays: Wenn die Größe unsicher ist, bevorzugen Sie dynamische Arrays.
- Eingebaute Funktionen nutzen: Sprachspezifische Funktionen für Array-Operationen nutzen.
- Grenzprüfung: Immer auf Randbedingungen prüfen, um IndexOutOfBoundsException zu vermeiden.
Beispiel für ein statisches und dynamisches Array in GO
package main
import (
"fmt"
"unsafe"
)
func main() {
// Static Array
var staticArr [5]int64
staticArr[0] = 1
staticArr[1] = 2
staticArr[2] = 3
staticArr[3] = 4
staticArr[4] = 5
elementSize := unsafe.Sizeof(staticArr[0])
totalSize := elementSize * uintptr(len(staticArr))
fmt.Printf("Memory used by static array: %d bytes\n", totalSize)
fmt.Println()
// Dynamic Array (Slice)
dynamicArr := make([]int32, 0, 5)
before := unsafe.Sizeof(dynamicArr[0])
beforeTotal := before * uintptr(len(dynamicArr))
fmt.Printf("Memory used by dynamic array (before): %d bytes\n", beforeTotal)
// Append elements to dynamic array
for i := 0; i