Hallo Gemeinschaft,
Gegeben ist folgendes:
bei raus gekommen ist folgendes:
Für die LinkedList benutze ich die bereits selbst geschriebe LinkedList, siehe hier: http://www.java-forum.org/allgemein...en-eigene-generische-klasse-linkedlist-2.html .
Nun zum Problem:
Why?? Ich wollt mein Iterator aus der LinkedList benutzen, aber heraus kam der benannte Fehler (code zeile 65, 86 und 103 (kvlist)). Wisst ihr einen Rat bitte bzw was mache ich mir zu schwer?
Gegeben ist folgendes:
Java:
package Pflichtaufgabe2;
public interface Map<K, V> {
/* Typ-Parameter:
* K - der Typ der Schluessel
* V - der Typ der Werte
*
* Hinweis: zum Vergleich der Schluessel wird die equals-Methode verwendet
*/
/**
* fuegt ein Schluessel-Wert-Paar in die Map ein
* @param key der Schluessel
* @param value der Wert
* @return falls es schon einen Wert mit Schluessel key in der Map gab,
* wird der alte Wert entfernt und zurueckgegeben; sonst wird null zurueckgegeben
*/
V put(K key, V value);
/**
* bestimmt den Wert zu einem Schluessel in der Map
* @param key der Schluessel
* @return den Wert zum Schluessel key, falls ein entsprechendes Schluessel-Wert-Paar vorhanden ist;
* null sonst
*/
V get(K key);
/**
* entfernt ein Schluessel-Wert-Paar aus der Map
* @param key der Schluessel
* @return der Wert zu dem Schluessel, falls ein entsprechendes Schluessel-Wert-Paar vorhanden ist;
* null sonst
*/
V remove(K key);
}
bei raus gekommen ist folgendes:
Java:
package Pflichtaufgabe2;
public class Hashtable<K, V> implements Map<K, V>{
private class KeyValue{
private K key;
private V value;
/**
* Konstrukter zum erstellen eines SchlüsselWertePaares vom Typ KeyValue
* @param key, value ist ein Generische Typ, key ist Interger (int)
*/
public KeyValue(K key, V value){
this.key = key;
this.value = value;
}
/**
* Gibt eine lesbare Stringrepresentation des Objektes zurück
* @return String die Werte der Variablen des Objektes
*/
public String toString(){
return key + "," + value;
}
}
private LinkedList<KeyValue>[] arr;
/**
* Konstruktor um die Größe des Arrays der Hashtabele zu setzten.
* @param arraySize vom Typ int
*/
@SuppressWarnings("unchecked")
public Hashtable(int arraySize) {
this.arr = new LinkedList[arraySize];
for (int i=0; i < this.arr.length; i++) {
this.arr[i] = new LinkedList<KeyValue>();
}
}
/**
* Berechnet den Index an dem in der Hashtabelle eingefügt wird.
* @param key vom Typ K (Generisch).
* @return index der Wert an dem in der Hashtabelle eingefügt wird vom Typ int als Betrag.
*/
public int hashFunction(K key){
int index = Math.abs(key.hashCode() % arr.length);
return index;
}
/**
* fuegt ein Schluessel-Wert-Paar in die Map ein
* @param key der Schluessel
* @param value der Wert
* @return falls es schon einen Wert mit Schluessel key in der Map gab,
* wird der alte Wert entfernt und zurueckgegeben; sonst wird null zurueckgegeben
*/
@Override
public V put(K key, V value) {
LinkedList<KeyValue> kvList = arr[hashFunction(key)];
V oldValue = null;
for (KeyValue keyValue : kvList) {
if (keyValue.key.equals(key)) {
oldValue = keyValue.value;
keyValue.value = value;
return oldValue;
}
}
kvList.add(new KeyValue(key, value));
return null;
}
/**
* bestimmt den Wert zu einem Schluessel in der Map
* @param key der Schluessel
* @return den Wert zum Schluessel key, falls ein entsprechendes Schluessel-Wert-Paar
* vorhanden ist; null sonst
*/
@Override
public V get(K key) {
LinkedList<KeyValue> kvList = arr[hashFunction(key)];
for (KeyValue keyValue : kvList) {
if (keyValue.key.equals(key))
return keyValue.value;
}
return null;
}
/**
* entfernt ein Schluessel-Wert-Paar aus der Map
* @param key der Schluessel
* @return der Wert zu dem Schluessel, falls ein entsprechendes Schluessel-Wert-Paar
* vorhanden ist; null sonst
*/
@Override
public V remove(K key) {
LinkedList<KeyValue> kvList = arr[hashFunction(key)];
for (KeyValue keyValue : kvList) {
if (keyValue.key.equals(key)) {
kvList.remove(keyValue);
return keyValue.value;
}
}
return null;
}
public static void main(String[] args) {
Hashtable<Integer, String> ht = new Hashtable<Integer, String>(11);
// Fügt bla an Stelle 26 % länge des Array an.
System.out.println("5 mal Elemente unter Key = 26 speichern und HT ausgeben:");
ht.put(26, "str1");
ht.put(26, "str2");
ht.put(26, "str1");
ht.put(26, "str3");
ht.put(26, "str4");
// Gibt das gesamte Array aus
System.out.println(ht);
System.out.println("Zusätzlich 5 Elemente unter 1,27,28,29,30 einfügen und HT ausgeben:");
ht.put(27, "str1");
ht.put(28, "str2");
ht.put(29, "str1");
ht.put(30, "str3");
ht.put(1, "str3");
// Gibt das gesamte Array nochmal aus
System.out.println(ht);
// Gibt den Wert an Stelle 4 wieder
System.out.println("Element unter 4 = " + ht.get(4));
// Gibt den Wert an Stelle 4 wieder
System.out.println("Element unter 28 = " + ht.get(28));
System.out.println("Remove mit key 4 = " + ht.remove(4));
System.out.println("Remove mit key 28 = " + ht.remove(28));
System.out.println("Remove mit key 29 = " + ht.remove(29));
System.out.println(ht);
// und jetzt noch mal nen gaaaanz viel elemente einfügen und dabei alte überschreiben
for (int i = 0; i < 100; i++) {
ht.put(i, "Striiing" + i);
}
System.out.println(ht);
System.out.println("Das wars");
}
}
Für die LinkedList benutze ich die bereits selbst geschriebe LinkedList, siehe hier: http://www.java-forum.org/allgemein...en-eigene-generische-klasse-linkedlist-2.html .
Nun zum Problem:
Java:
Exception in thread "main" java.lang.Error: Unresolved compilation problem:
Can only iterate over an array or an instance of java.lang.Iterable
at Pflichtaufgabe2.Hashtable.put
Why?? Ich wollt mein Iterator aus der LinkedList benutzen, aber heraus kam der benannte Fehler (code zeile 65, 86 und 103 (kvlist)). Wisst ihr einen Rat bitte bzw was mache ich mir zu schwer?