Migration Deep Dive für 12 · Collections öffnen →
⌂ ÜbersichtAlle Vergleiche
Modul 12 · 100 % Codeabdeckung

Collections

Vollständiger Legacy-Modern-Vergleich aller Java-Klassen, Tests, Maven-POMs und relevanten Ressourcen dieses Moduls. Jede Datei ist genau einmal einer fachlich passenden Vergleichsgruppe zugeordnet.

3Legacy-Dateien
3Modern-Dateien
70 → 74Codezeilen
7/7vollständig erfasst

Fachliche Einordnung

Legacy

Mutable Listen und lineare Suche

Die Implementierung arbeitet mit einer Liste und gibt intern veränderbare Strukturen leichter preis.

Modern

Map, immutable Rückgaben und moderne Collection-APIs

Eine Map bildet den Schlüsselzugriff direkt ab und Rückgaben werden kontrolliert kopiert.

Vergleichsfokus: Alle Dateien werden nach technischer Rolle und fachlicher Verantwortung gruppiert.
Wichtige Abgrenzung: One-to-many-Änderungen werden als Gruppe dargestellt; eine künstliche 1:1-Zuordnung wird vermieden.

Vollständige Abdeckungsmatrix

Die Ähnlichkeit ist eine technische Orientierung auf normalisiertem Quelltext. Sie ersetzt keine fachliche Bewertung.

VergleichsgruppeLegacy-DateienModern-DateienLegacy-ZeilenModern-ZeilenÄhnlichkeit
Build-Konfiguration113434100%
Collection-Modell und Test22364039%

Gemeinsame Modulstruktur

Das Pair-POM bindet die Legacy- und Modern-Submodule zusammen und gehört deshalb ebenfalls zur vollständigen Codeabdeckung.

Gemeinsam · 19 Zeilenpom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>at.aydin.academy</groupId>
        <artifactId>java-modernization-deep-dive</artifactId>
        <version>1.0.0</version>
        <relativePath>../../pom.xml</relativePath>
    </parent>
    <artifactId>12collections-pair</artifactId>
    <packaging>pom</packaging>
    <name>Collections: Legacy und Modern</name>
    <modules>
        <module>legacy</module>
        <module>modern</module>
    </modules>
</project>

Alle semantischen Codevergleiche

01Build-KonfigurationDirektvergleich · Legacy 34 / Modern 34 Zeilen · Ähnlichkeit 100%

Compiler- und Testkonfiguration wird verglichen.

Legacy-DateienModern-DateienEinordnung
pom.xmlpom.xmlDirektvergleich
Semantische Ähnlichkeit: 100%

Legacy

Legacy · 34 Zeilenlegacy/pom.xml
<?xml version="1.0" encoding="UTF-8"?>
        <project xmlns="http://maven.apache.org/POM/4.0.0"
                 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
            <modelVersion>4.0.0</modelVersion>
            <parent>
                <groupId>at.aydin.academy</groupId>
                <artifactId>12collections-pair</artifactId>
                <version>1.0.0</version>
                <relativePath>../pom.xml</relativePath>
            </parent>
            <artifactId>collections-legacy</artifactId>
            <packaging>jar</packaging>
            <name>Collections Legacy</name>

            <dependencies>

<dependency>
    <groupId>org.junit.jupiter</groupId>
    <artifactId>junit-jupiter</artifactId>
    <scope>test</scope>
</dependency>

            </dependencies>
            <build>
                <plugins>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-compiler-plugin</artifactId>
                    </plugin>

                </plugins>
            </build>
        </project>

Modern

Modern · 34 Zeilenmodern/pom.xml
<?xml version="1.0" encoding="UTF-8"?>
        <project xmlns="http://maven.apache.org/POM/4.0.0"
                 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
            <modelVersion>4.0.0</modelVersion>
            <parent>
                <groupId>at.aydin.academy</groupId>
                <artifactId>12collections-pair</artifactId>
                <version>1.0.0</version>
                <relativePath>../pom.xml</relativePath>
            </parent>
            <artifactId>collections-modern</artifactId>
            <packaging>jar</packaging>
            <name>Collections Modern</name>

            <dependencies>

<dependency>
    <groupId>org.junit.jupiter</groupId>
    <artifactId>junit-jupiter</artifactId>
    <scope>test</scope>
</dependency>

            </dependencies>
            <build>
                <plugins>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-compiler-plugin</artifactId>
                    </plugin>

                </plugins>
            </build>
        </project>
02Collection-Modell und TestDirektvergleich · Legacy 36 / Modern 40 Zeilen · Ähnlichkeit 39%

Rohe/mutable Collection-Nutzung wird moderner Collection-Verarbeitung gegenübergestellt.

Legacy-DateienModern-DateienEinordnung
LegacyInventory.java
LegacyInventoryTest.java
Inventory.java
InventoryTest.java
Direktvergleich
Semantische Ähnlichkeit: 39%

Legacy

package at.aydin.lab.collections.legacy;

import java.util.*;

// Design Pattern: Collection Wrapper
// Zweck: Kapselt alte Vector-/Hashtable-Strukturen hinter fachlichen Methoden.
public final class LegacyInventory {
    private final Vector<String> order = new Vector<>();
    private final Hashtable<String, Integer> stock = new Hashtable<>();
    public void add(String sku, int quantity) {
        if (!stock.containsKey(sku)) order.add(sku);
        stock.put(sku, stock.getOrDefault(sku, 0) + quantity);
    }

    public int quantity(String sku) {
        return stock.getOrDefault(sku, 0);
    }

    public Vector<String> orderedSkus() {
        return new Vector<>(order);
    }
}
package at.aydin.lab.collections.legacy;

import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.assertEquals;

class LegacyInventoryTest {
    @Test
    void mergesQuantity() {
        var i = new LegacyInventory();
        i.add("A", 2);
        i.add("A", 3);
        assertEquals(5, i.quantity("A"));
    }
}

Modern

package at.aydin.lab.collections.modern;

import java.util.*;

// Design Pattern: Snapshot
// Zweck: Gibt unveränderliche Momentaufnahmen statt interner mutabler Collections zurück.
public final class Inventory {
    private final LinkedHashMap<String, Integer> stock = new LinkedHashMap<>();
    public void add(String sku, int quantity) {
        Objects.requireNonNull(sku);
        if (quantity <= 0) throw new IllegalArgumentException("quantity");
        stock.merge(sku, quantity, Integer::sum);
    }

    public int quantity(String sku) {
        return stock.getOrDefault(sku, 0);
    }

    public Map<String, Integer> snapshot() {
        return Collections.unmodifiableMap(new LinkedHashMap<>(stock));
    }

    public List<String> orderedSkus() {
        return List.copyOf(stock.sequencedKeySet());
    }
}
package at.aydin.lab.collections.modern;

import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.*;

class InventoryTest {
    @Test
    void exposesImmutableSnapshot() {
        var i = new Inventory();
        i.add("A", 2);
        assertEquals(2, i.snapshot().get("A"));
        assertThrows(UnsupportedOperationException.class, () -> i.snapshot().put("B", 1));
    }
}
⌂ Cockpit