master
3009594 2024-08-25 22:53:15 +02:00
parent 61704f40c7
commit 7491452d4a
3 changed files with 146 additions and 35 deletions

View File

@ -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<Integer,String> h1 = new MyGenericHashMap<>();
h1.put(3009594, "omar");
String value = h1.getValue(3009594);
assertEquals("omar",value);
}
}

View File

@ -1,40 +1,122 @@
package Hashmap;
public class MyGenericHashMap <K,V>{
import java.util.ArrayList;
K key;
V value;
import java.util.ArrayList;
import java.util.LinkedList;
public class MyGenericHashMap<K, V> {
// Konstantenwert für die Größe der HashMap (Anzahl der Buckets).
final int SIZE = 10;
Object[] table;
// Array, das die Einträge (key-value Paare) der HashMap speichert.
Entry<K,V>[] table;
// Konstruktor für die MyGenericHashMap-Klasse.
public MyGenericHashMap() {
table = new Object[SIZE];
// Initialisiert das Array mit der angegebenen Größe.
table = new Entry[SIZE];
}
private int Hashadresse(int key) {
return key % SIZE;
// Innere Klasse, die ein einzelnes key-value Paar darstellt.
class Entry<K, V> {
K key; // Der Schlüssel des Eintrags.
V value; // Der Wert, der dem Schlüssel zugeordnet ist.
Entry<K,V> 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 void put(K key, V value) {
int index = 0;
public K getKey() {
return key;
}
// wenn key int,double,float ist, wird auf integer Wert umgewandelt
if (key instanceof Number)
index = Hashadresse(((Number) key).intValue());
public void setKey(K key) {
this.key = key;
}
else if(key instanceof Character)
index =(Character) key - 'a';
public V getValue() {
return value;
}
table[index] = value;
System.out.println("[" + index + "]: " + table[index]);
public void setValue(V value) {
this.value = value;
}
}
public Entry<K, V> put(K key, V value) {
int hash = key.hashCode() % SIZE;
Entry<K,V> e = table[hash];
if (e == null) {
table[hash] = new Entry<K,V>(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<K,V>(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<K,V> 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) {
MyGenericHashMap <Integer,String> t1 = new MyGenericHashMap<>();
t1.put(112, "hallo");
// Erstellen einer neuen Instanz von MyGenericHashMap für Integer-Schlüssel und String-Werte.
MyGenericHashMap<Integer, String> 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();
}
}

View File

@ -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);
}
}