ich suche mehrere Beispiele bzw. Übungen über Hastable. In dem Lernheft steht leider
nicht viel zu erklären, was mich etwas frustiert macht. Und mit diesem Thema muß ich eine Aufgabe noch erledigen, noch keine konkrete Lösungen gefunden, seufz…
Brauche erste mal ein paar Tipps von euch.
Die Aufgabe werde ich euch später zeigen. Was oben betrifft, brauche ich es unbedingt.
Kann einer mir das hier geben?
Was ist das denn für ein “Lehrbuch”? Kann es sein, dass das etwas veraltet ist? Man sollte eigentlich NIE sehen, dass man mit einer Hashtable rumhantiert, außer natürlich dort, wo man sie erstellt.
Ganz allgemein verwendet man eine Map (zum Beispiel eine Hashtable) wenn man eine “Zuordnung” von einem Element zum anderen herstellen will. Man kann damit ein Objekt auf (genau) ein anderes Objekt abbilden.
Map<String, Integer> map = new Hashtable<String, Integer>();
map.put("Hallo", 1);
map.put("Welt", 2);
map.put("X", 3);
map.put("X", 4);
System.out.println(map.get("Hallo")); // Gibt 1 aus
System.out.println(map.get("Welt")); // Gibt 2 aus
System.out.println(map.get("X")); // Gibt 4 aus
System.out.println(map.get("YYY")); // Gibt 'null' aus
public Object get (Object key)```
Diese beiden Methoden sind in der Hashtabelle gespeichert.
Object => Ganzzahl (Integer, Double, Character etc.)
put => einfügen
get => zurückgeben
Das ist mir klar, aber was zum Beispiel, hier:
```Hashtable<Integer, key> test = new Hashtable<Integer, value>();```
Dies kapiere ich nicht. Weißt Du, was das bedeutet?
Marco13,
> Eigentlich sollte man keine Übungen zu "Hashtable" machen. Hashtable ist nur eine (sehr spezielle) Implementierung einer "Map" ( http://java.sun.com/javase/6/docs/ap.../util/Map.html ).
Map => ist es eine Abbildung ("Mapping")? Oh je...das in englischer Sprache muß ich
mehrmals lesen. Trotzdem okay! :-)
Das Lernheft kommt vom SGD Darmstadt. Veraltet? Das kann nicht sein. Das über
Hashtable (Adressverzeichnis, Hashcode, Hashmap usw.) steht drin. Jedoch wird das
nicht genug erklärt. Nur drei Seiten von 100 Seiten! Reicht das doch oder nicht?
Na gut, ich konzentriere mich auf Dein Beispiel. ;-)
Ja, eine Hashtable ist auch nur eine Map (wie TreeMap, HashMap… (der Unterschied zwischen HashMap und Hashtable ist im Moment nicht so wichtig)
[QUOTE=yampi]
Das Lernheft kommt vom SGD Darmstadt. Veraltet? Das kann nicht sein. [/QUOTE]
Was macht dich da so sicher? Also, du brauchst jetzt keine “Angst” zu haben: Du lernst ja nichts “falsches” - nur etwas, was man heutzutage vielleicht “besser” machen könnte.
Btw sowas hier: Hashtable<Integer, key> test = new Hashtable<Integer, value>();
ist aber eigentlich syntaktisch falsch: Das “key” und “value” sollte in dieser Form nicht dastehen. Wenn man sowas schreibt wie Hashtable<Integer, String> test = new Hashtable<Integer, String>();
dann bedeutet das: Erstelle mir eine Hashtable namens ‘test’, die Integer-Werte auf Strings abbildet.
Die Doku zu “get” und “put” sollte eigentlich eher wie das hier aussehen, aber … vielleicht ist das auch der Grund für die andere Frage: Wenn du mit den < spitzen Klammern > nichts anfangen kannst, dann habt ihr http://java.sun.com/j2se/1.5.0/docs/guide/language/generics.html vermutlich noch nicht durchgenommen. Kommt (hoffentlich) noch.
Man kann an dieser Stelle denk ich auch erstmal die Generics weglassen. Vor Java 5 gabs die sowieso noch nicht. Wenn Ihr diese dann mal behandelt weißt Du nachher auch wozu sie gut sind, also nicht unnötig davon verunsichern lassen, lieber weglassen da sie eh „optional“ sind, wenn auch gut aber das kommt ja wie gesagt später
Das “extends java.util.Hashtable” kann glaubich weg. Deine Klasse verwendet eine Hashtable. Durch das “extends java.util.Hashtable” sagst du: Deine Klasse IST eine Hashtable. (Das kann man zwar machen, ist aber im allgemeinen (und für diesen Test) nicht sinnvoll).
Bei
Kreis elementVier = (Rechteck)test.get(3);
müßte es eine ClassCastException geben: Du legst eine “Rechteck” in die Map, und versuchst dann, das als “Kreis” wieder rauszuholen.
Mit
Rechteck elementVier = test.get(3);
sollte es aber gehen (sofern Rechteck auch “getX” und “getY” anbietet)
cannot find symbol symbol: constructor Rechteck(int,int)
Das heißt, dass es den Konstruktor Rechteck(int, int) nicht gibt.
Wenn es einen gäbe, müsste das ungefähr so aussehen:
//Das ist der Konstruktor, der da sein soll, aber so wie es aussieht nicht existiert:
public Rechteck(int argument1, int argument2) {
//tu irgendwas
}
}```
Gruß,
pcworld
{
this.x = x;
this.y = y;
this.breite = breite;
this.hoehe = hoehe;
}```
```test.put(new Integer(0),new Rechteck(123,123));```
Das ist nicht korrekt. Zwei Zahlen müssen dazu sein. Hier:
```test.put(new Integer(0),new Rechteck(123,123,144,144));```
Nach dem ich das kompiliert habe, ist die Fehlermeldung immer noch da,
aber nicht so wie eben, sondern:
cannot find symbol
symbol: class Hashtable
location: RechteckDatenstruktur
Hashtable<Integer, Rechteck> test = new Hashtable<Integer, Rechteck>();
Kann das sein, dass dies in der Konstruktormethode fehlt?
Kann es sein, dass du in der Klasse RechteckDatenstruktur den Import der Hashtable vergessen hast?: import java.util.Hashtable;
Gruß,
pcworld
PS: Für sowas ist Eclipse nicht schlecht. Da wird das am Rand mit so einer Birne direkt in der Zeile angezeigt, in der der Fehler ist, und wenn du auf diese Birne klickst, bekommst du gleich ein paar Vorschläge zur Fehlerbehebung. Und auch wird über einen Tooltip nochmal genauert erläutert, was genau der Fehler ist.
[QUOTE=yampi]Nur eins, was ich wissen möchte, warum muß das nicht sein, hier:
„public class RechteckDatenstruktur extends java.util.Hashtable“[/QUOTE]
Siehe Post von Marco13.
Das mit dem extends siehe mein Link.
Ein Import bringt nur, dass du dir Tipparbeit sparst. Wenn du „import java.util.Hashtable“ schreibst, dann kannst du die Hashtable in deinem Code wiefolgt nutzen: Hashtable<String, String> hashtable = new Hashtable<String, String>();
Wenn du den Import weglässt, musst du die Paketdeklaration mit angeben: java.util.Hashtable<String, String> hashtable = new java.util.Hashtable<String, String>();
Ansonsten überflieg mal das da: Java ist auch eine Insel: Import
Ja. Bei IDEs würde jetzt z. B. der Vorschlag gemacht werden, ob du die Klasse importieren oder erstellen willst. Aber wie schon erwähnt wurde, bleib erstmal bei deinem Java-Editor als Anfänger.