Mutable Listen und lineare Suche
Die Implementierung arbeitet mit einer Liste und gibt intern veränderbare Strukturen leichter preis.
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.
Die Implementierung arbeitet mit einer Liste und gibt intern veränderbare Strukturen leichter preis.
Eine Map bildet den Schlüsselzugriff direkt ab und Rückgaben werden kontrolliert kopiert.
Die Ähnlichkeit ist eine technische Orientierung auf normalisiertem Quelltext. Sie ersetzt keine fachliche Bewertung.
| Vergleichsgruppe | Legacy-Dateien | Modern-Dateien | Legacy-Zeilen | Modern-Zeilen | Ähnlichkeit |
|---|---|---|---|---|---|
| Build-Konfiguration | 1 | 1 | 34 | 34 | 100% |
| Collection-Modell und Test | 2 | 2 | 36 | 40 | 39% |
Das Pair-POM bindet die Legacy- und Modern-Submodule zusammen und gehört deshalb ebenfalls zur vollständigen Codeabdeckung.
Compiler- und Testkonfiguration wird verglichen.
| Legacy-Dateien | Modern-Dateien | Einordnung |
|---|---|---|
| pom.xml | pom.xml | Direktvergleich Semantische Ähnlichkeit: 100% |
<?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><?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>Rohe/mutable Collection-Nutzung wird moderner Collection-Verarbeitung gegenübergestellt.
| Legacy-Dateien | Modern-Dateien | Einordnung |
|---|---|---|
| LegacyInventory.java LegacyInventoryTest.java | Inventory.java InventoryTest.java | Direktvergleich Semantische Ähnlichkeit: 39% |
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"));
}
}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));
}
}