HashMap typisieren

Status
Nicht offen für weitere Antworten.

guni

Bekanntes Mitglied
Hi, versuche gerade eine HashMap zu erstellen
Code:
private HashMap h<long,String>
bekomme einen Fehler "Could not match type Arguments on java.util.HashMap<long,String>
kann mir irgendwer erklären, woran das liegt?
akzeptieren die Keys/Values meiner HashMap nur bestimmte Datentypen?
Wenn ja, gibt es eine Alternative zur Hashmap, die mir ein Key-Value-Pair vom Typ <long,String> zulässt?!

danke, guni
 
in eine Map können nur Objekte, long ist kein Objekt, Long dagegen schon

Generische Parameter können auch nur Klassen wie Long sein, nicht long

es heißt außerdem
private HashMap<Long,String> h = null;
statt
private HashMap h<Long,String> = null;
 
danke ...
wird in Java automatisch zwischen Long und long konvertiert?!
ich habe nämlich verschiedene Funktionen einer API, die long[] als Parameter übergeben bekommen.
Gibt es irgendeine Methode, mit der ich die keys meiner HashMap bekomme?! Ich habe values() gesehen; mich wundert, dass es keine keys() gibt!

lg, guni
 
zwischen long und Long wird in bestimmten Situationen automatisch konvertiert, ja,
wenn du map.put(5,"5"); ausführst, dann wird aus der 5 ein Long, falls du Java 1.5 verwendest,

long[] ist übrigens wiederum eine Klasse und könnte damit wie String oder Long überall verwendet werden

> mich wundert, dass es keine keys() gibt

API, Lehrbuch oder Code-Completion?
die Operation fängt auch mit k, e und y an, danach kommt sogar ein S, aber groß geschrieben und paar Buchstaben folgen noch
 
Ok ... nochmals danke.
ich Idiot hab zwar in der API geschaut, hab aber nur drübergescrollt und war so auf keys (Collection) fixiert, dass ich mir die andere Methode mit vom Datentyp 'Set' gar nicht angeschaut hab ...
na gut: um unser Hangman fertig zu spielen: das Wort, das es zu erraten gilt ist keySet, oder?!

wie auch immer:
mein Typecasting funktioniert nicht ganz so wie erwartet:
Code:
        HashMap<Long,String> t = new HashMap<Long,String>();
        t.put(new Long(1),"Eintrag 1");
        t.put(new Long(2),"Eintrag 2");
        t.put(new Long(3),"Eintrag 3");
        t.put(new Long(4),"Eintrag 4");
        t.put(new Long(5),"Eintrag 5");
        t.put(new Long(6),"Eintrag 6");
        t.put(new Long(7),"Eintrag 7");
        t.put(new Long(8),"Eintrag 8");
        t.put(new Long(9),"Eintrag 9");
        
        long[] = (long[])t.keySet();
die Konvertierung in long[] funktioniert nicht; wie kann ich das manchen?
mit einem .toArray hab ich es auch nicht zsammgebracht!

lg, guni
 
keySet() liefert, wie schon der Name oder wenigstens die API (!) sagt ein Set,
außerdem muss man Variablen einen Namen geben, nur aus Luft, das geht nicht:

Set<Long> ichBinEinSet = t.keySet();

das Set könntest du dann noch in ein Long[] umwandeln, bringt aber vielleicht nix neues mehr?
ein long[] wird jedenfalls nie draus
 
ok ... danke für eure Antworten ...
sieht so aus, als wäre ich echt am Besten beraten, wenn ich mir da eine eigene HashMap-Klasse schreib ...

lg, guni
 
so. fertig.
da ich meine anforderungen (datentypen; keys und values müssen beide unique sein) kenne, ist das ganze (glaub ich) recht primitiv zu lösen:

Code:
public class MyHash {
    
    private LinkedList<String> keys;
    private LinkedList<Long> vals;

    public void put(String key, long val){
        keys.add(key);
        vals.add(val);
    }
    
    public void remove(String key){
        int pos = keys.indexOf(key);
        keys.remove(pos);
        vals.remove(pos);
    }
            
    public long get(String key){
        int pos = keys.indexOf(key);
        return vals.get(pos);
    }
    
    public String get(long val){
        int pos = vals.indexOf(val);
        return keys.get(pos);
    }
}

danke nochmal für eure Hilfe,

lg, guni
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben