Datenstruktur HashMap mit Indexer



  • Hallo Leute,

    gibt es in Java ne Datenstruktur, auf der ich über einen index zugreifen kann und gleichzeitig über indizierte keys!?

    Das Problem ist, dass ich durch anfügen von Elementen immer noch über einen zahlen index zugreifen will, ohne dass die Element schon für den indizierten Zugriff sortiert sind!

    Beispiel hashmap:

    put("C",1);
    put("B",2);
    put("A",3);
    
    nun will ich di
    

    e schnelle indizierung vewenden können und auf A,B,C zugreifen können, aber auch sagen können gibt mir element 0, was dann "C" sein soll, und nich "A" (durch sortierung)

    Muss ich wohl selbser was bauen?

    grüße



  • Wie wärs mit nem einfachen Wrapper ?
    Pseudocode:

    class IndexUndKeyMap
    {
       List<int> list;
       HashMap<string, int> map;
       void put(string key, int value)
       {
          list.add(value);
          map.put(key, value);
       }
    
        void getByKey(string key)
        {
            return map.get(key);
        }
    
        int getByIndex(int index)
        {
           return list.get(index);
        }
    }
    

    Alternativ auch ne LinkedHashMap und dann über alle Elemente iterieren.

    Wobei sich mir der Sinn nicht erschließt, warum brauchst du bitte beides ?



  • ja genau so hab ich es dann auch gemacht ;)) danke



  • Der Sinn liegt darin, dass "schnell" via "String" und "Id" zugegriffen werden muss! Bzw. die Reihenfolge beim anfügen eines Elements durch die Hashmap und zugriff druch id nich verändert werden darf, aber trozdem ein schneller zugriff via string indizies gehen soll:)



  • Ja schon, aber das klingt nach einem Designfehler. Warum brauchst du denn sowohl Index als auch String-Key Zugriff ?
    Reicht nicht eins von beiden aus ?



  • Nein das is quasi ein Variablen Table! welcher Variablen als Name und ID hinterlegt! (Compilerbau)

    Wenn ich ich nun Code Intrpetiere, durch sucht mein Scanner einen Ausdruck nach Strings und im Bytecode hat dieser dann die ID!

    Jetzt gibt es noch die Anforderung aus ByteCode wieder sourcecode zu erzeugen, dann muss ich über ID zugreifen...

    Der Designfehler liegt meiner Meinung nach darin, compilierten code wieder reverse zu engineeren.. is nunmal ne Anforderung:) Für Debugzwecke der bytecode runtime!

    🙂



  • Aber nach dem der Scanner durchgelaufen ist brauchst du den Namen doch nicht mehr ?
    Dann hat jede Variable nur noch eine ID, und zum dekompilieren gibts dann halt ne Liste von Variablennamen.
    Wozu denn Zugriffe über den Namen der Variable wenn du den Code doch schon umgewandelt hast ?



  • Doch ich brauche die name, weil so auch ein projekt vergleich gemacht werden soll! ES sollen Namen wiedervewendet werden.. naja schwer zu erklären.. gefällt mir auch nich;)


Log in to reply