HashMap
parent
61704f40c7
commit
7491452d4a
|
@ -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);
|
||||
|
||||
}
|
||||
|
||||
}
|
|
@ -1,40 +1,122 @@
|
|||
package Hashmap;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.LinkedList;
|
||||
|
||||
public class MyGenericHashMap<K, V> {
|
||||
|
||||
K key;
|
||||
V value;
|
||||
|
||||
// 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) {
|
||||
// Erstellen einer neuen Instanz von MyGenericHashMap für Integer-Schlüssel und String-Werte.
|
||||
MyGenericHashMap<Integer, String> t1 = new MyGenericHashMap<>();
|
||||
t1.put(112, "hallo");
|
||||
}
|
||||
// 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();
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue