From 7491452d4abe5ba4bc605c86e573290246678b36 Mon Sep 17 00:00:00 2001 From: 3009594 Date: Sun, 25 Aug 2024 22:53:15 +0200 Subject: [PATCH] HashMap --- Programmierung2/src/Hashmap/JunitTest.java | 25 +++ .../src/Hashmap/MyGenericHashMap.java | 152 ++++++++++++++---- Programmierung2/src/Hashmap/MyHashMap.java | 4 + 3 files changed, 146 insertions(+), 35 deletions(-) create mode 100644 Programmierung2/src/Hashmap/JunitTest.java diff --git a/Programmierung2/src/Hashmap/JunitTest.java b/Programmierung2/src/Hashmap/JunitTest.java new file mode 100644 index 0000000..6bb560a --- /dev/null +++ b/Programmierung2/src/Hashmap/JunitTest.java @@ -0,0 +1,25 @@ +package Hashmap; + +import static org.junit.jupiter.api.Assertions.*; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +import Hashmap.MyGenericHashMap.Entry; + +class JunitTest { + @BeforeEach + void list() { + + } + + @Test + void test() { + MyGenericHashMap h1 = new MyGenericHashMap<>(); + h1.put(3009594, "omar"); + String value = h1.getValue(3009594); + assertEquals("omar",value); + + } + +} diff --git a/Programmierung2/src/Hashmap/MyGenericHashMap.java b/Programmierung2/src/Hashmap/MyGenericHashMap.java index db6567b..9e64713 100644 --- a/Programmierung2/src/Hashmap/MyGenericHashMap.java +++ b/Programmierung2/src/Hashmap/MyGenericHashMap.java @@ -1,40 +1,122 @@ package Hashmap; -public class MyGenericHashMap { - - K key; - V value; - - final int SIZE = 10; - Object[] table; - - public MyGenericHashMap() { - table = new Object[SIZE]; - } - - private int Hashadresse(int key) { - return key % SIZE; - } - - public void put(K key, V value) { - int index = 0; - - // wenn key int,double,float ist, wird auf integer Wert umgewandelt - if (key instanceof Number) - index = Hashadresse(((Number) key).intValue()); - - else if(key instanceof Character) - index =(Character) key - 'a'; - - table[index] = value; - - System.out.println("[" + index + "]: " + table[index]); - - } +import java.util.ArrayList; - public static void main(String[] args) { - MyGenericHashMap t1 = new MyGenericHashMap<>(); - t1.put(112, "hallo"); - } +import java.util.ArrayList; +import java.util.LinkedList; +public class MyGenericHashMap { + // Konstantenwert für die Größe der HashMap (Anzahl der Buckets). + final int SIZE = 10; + + // Array, das die Einträge (key-value Paare) der HashMap speichert. + Entry[] table; + + // Konstruktor für die MyGenericHashMap-Klasse. + public MyGenericHashMap() { + // Initialisiert das Array mit der angegebenen Größe. + table = new Entry[SIZE]; + } + + // Innere Klasse, die ein einzelnes key-value Paar darstellt. + class Entry { + K key; // Der Schlüssel des Eintrags. + V value; // Der Wert, der dem Schlüssel zugeordnet ist. + Entry next; + + // Konstruktor für ein Entry-Objekt. + public Entry(K key, V value) { + this.key = key; // Initialisiert den Schlüssel. + this.value = value; // Initialisiert den Wert. + } + public Entry() { + this.key = null; + } + + public K getKey() { + return key; + } + + public void setKey(K key) { + this.key = key; + } + + public V getValue() { + return value; + } + + public void setValue(V value) { + this.value = value; + } + + } + + public Entry put(K key, V value) { + int hash = key.hashCode() % SIZE; + Entry e = table[hash]; + + if (e == null) { + table[hash] = new Entry(key, value); + return table[hash]; // Gibt den neuen Eintrag zurück + } else { + while (e != null) { + if (e.getKey().equals(key)) { + e.setValue(value); + return e; // Gibt den aktualisierten Eintrag zurück + } + if (e.next == null) { + break; + } + e = e.next; + } + e.next = new Entry(key, value); + return e.next; // Gibt den neuen Eintrag zurück + } + } + + public V getValue(K key) { + int hash = key.hashCode() % SIZE; + //fange beim Head Index an + Entry temp = table[hash]; + while (temp != null) { + if (temp.getKey().equals(key)) { + return temp.getValue(); + } + temp = temp.next; + } + + return null; + } + + public void printAll() { + for (Entry temp : table) { + if (temp != null) { + System.out.println("[" + temp.key + "] :" + temp.value + " "); + while(temp.next != null) { + temp = temp.next; + System.out.println("[" + temp.key + "] :" + temp.value + " "); + } + } + + } + + } + + + + + // Main-Methode zum Testen der MyGenericHashMap-Klasse. + public static void main(String[] args) { + // Erstellen einer neuen Instanz von MyGenericHashMap für Integer-Schlüssel und String-Werte. + MyGenericHashMap t1 = new MyGenericHashMap<>(); + // Fügt das key-value Paar (3009594, "obai") zur HashMap hinzu. + t1.put(3009594, "obai"); + t1.put(3129594, "omar"); + t1.put(3129593, "abd"); + t1.put(3129393, "abd"); + t1.printAll(); + + } + + } diff --git a/Programmierung2/src/Hashmap/MyHashMap.java b/Programmierung2/src/Hashmap/MyHashMap.java index 777f0c9..ada60fd 100644 --- a/Programmierung2/src/Hashmap/MyHashMap.java +++ b/Programmierung2/src/Hashmap/MyHashMap.java @@ -58,5 +58,9 @@ public class MyHashMap { m1.getValue(14); System.out.println(m1.isEmpty(9)); + + Character key = 'a'; + int hash = key.hashCode(); + System.out.println(hash); } }