Einführung in Algorithmen und Datenstrukturen in Java
Das Erlernen von Algorithmen und Datenstrukturen ist die Grundlage, auf der die Karriere eines jeden Programmierers aufbaut. Für Java-Entwickler ist das Verständnis, wie grundlegende Datenstrukturen und Algorithmen funktionieren, von entscheidender Bedeutung: Es beeinflusst direkt die Leistung, die Lesbarkeit des Codes und die Fähigkeit, komplexe Probleme zu lösen. In diesem Artikel werden wir die wichtigsten Konzepte in einfacher Sprache mit anschaulichen Java-Codebeispielen erläutern.
Unabhängig davon, ob Sie sich auf ein Vorstellungsgespräch vorbereiten oder einfach nur effizienteren Code schreiben möchten, dieser Artikel wird Ihr Ausgangspunkt sein.
Was sind Datenstrukturen?
Eine Datenstruktur ist eine Möglichkeit, Daten im Speicher eines Computers zu organisieren und zu speichern. Die richtige Wahl der Datenstruktur kann ein Programm um ein Vielfaches beschleunigen. In Java gibt es zwei Arten von Datenstrukturen: eingebaute (Arrays) und Sammlungen (Klassen aus dem Java Collections Framework).
Arrays
Ein Array ist die einfachste und schnellste Datenstruktur. Es speichert Elemente desselben Typs in einem zusammenhängenden Speicherbereich. Der Zugriff auf ein Element über den Index erfolgt sofort (O(1)), aber das Hinzufügen oder Entfernen von Elementen erfordert das Neuerstellen des Arrays.
public class ArrayExample { public static void main(String[] args) { // Deklaration und Initialisierung eines Arrays int[] numbers = new int[5]; numbers[0] = 10; numbers[1] = 20; numbers[2] = 30; // Alternative Methode String[] fruits = {"Apfel", "Banane", "Orange"}; // Array durchlaufen for (int i = 0; i < fruits.length; i++) { System.out.println(fruits[i]); } }}ArrayList – dynamisches Array
ArrayList löst das Hauptproblem eines normalen Arrays – die feste Größe. Es wird automatisch erweitert, wenn neue Elemente hinzugefügt werden. Dies ist eine der beliebtesten Datenstrukturen in Java.
import java.util.ArrayList;
public class ArrayListExample { public static void main(String[] args) { ArrayList<String> list = new ArrayList<>(); // Elemente hinzufügen list.add("Java"); list.add("Python"); list.add("JavaScript"); // Element nach Index abrufen System.out.println("Erstes Element: " + list.get(0)); // Element entfernen list.remove("Python"); // Größe der Liste System.out.println("Größe der Liste: " + list.size()); }}Grundlegende Algorithmen für Anfänger
Ein Algorithmus ist eine Abfolge von Schritten zur Lösung einer Aufgabe. Wir werden drei grundlegende Algorithmen betrachten, die jeder Java-Entwickler kennen sollte.
Lineare Suche
Der einfachste Suchalgorithmus: Wir überprüfen nacheinander jedes Element des Arrays, bis wir das gesuchte finden.
public class LinearSearch { public static int findElement(int[] arr, int target) { for (int i = 0; i < arr.length; i++) { if (arr[i] == target) { return i; // Gibt den Index des gefundenen Elements zurück } } return -1; // Element nicht gefunden } public static void main(String[] args) { int[] data = {5, 3, 8, 1, 9, 2}; int index = findElement(data, 8); System.out.println("Index des Elements 8: " + index); // Gibt aus: 2 }}Binäre Suche
Die binäre Suche arbeitet deutlich schneller als die lineare Suche, erfordert jedoch, dass das Array sortiert ist. Der Algorithmus teilt das Array bei jedem Schritt in zwei Hälften und verwirft die eine Hälfte der Elemente.
import java.util.Arrays;
public class BinarySearch { public static int binarySearch(int[] arr, int target) { int left = 0; int right = arr.length - 1; while (left <= right) { int mid = l