kleine Frage zur HashMap und wie man diese erweitert

jeipack

Erfahrenes Mitglied
Hi Forum
Was ich bräuchte, wäre eine HashMap mit mehr als nur einem Wert (eine normale HashMap hat ja einen Key und nur einen Value).
Was ich gerne hätte, wäre eine HashMap die einen Key und n Values hat (n kann beim initiallisieren angegeben werden). Und dann spricht man das ganze einfach mit 'map.get1(key)' an.

Gibts sowas?

Ich hab mir notbedürftig selbst was zusammengebastelt:
kleine Klasse (aber nur mit statischer Value-Anzahl)
Der Key, sowie die Values werden in Vektoren gespeichert.
Wenn man nun den Value2 von KeyX will, sucht er im KeyVektor mit indexOf den Index und hollt dann mit diesem Index aus dem Value2Vektor den Wert raus.

Ist das eine gute Lösung?
 
Hallo,

zur Not geht das auch mit normalen Hausmitteln:
Java:
/**
 * 
 */
package de.tutorials;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * @author thomas.darimont
 * 
 */
public class MultiMapExample {

    /**
     * @param args
     */
    public static void main(String[] args) {
        Map<String, List<Integer>> map = new HashMap<String, List<Integer>>();
        map.put("numbers", new ArrayList<Integer>(Arrays.asList(0,1,2,3,4,5,6,7,8,9)));
        System.out.println(map);
        System.out.println(map.get("numbers").get(5));
        map.get("numbers").add(4711);
        System.out.println(map.get("numbers").get(map.get("numbers").size() -1));
    }
}

Gruß Tom
 
Ich würde dann einfach als Value ein Vector reingeben oder vielleicht wenn die mehreren Werte irgendwie eindeutig sind eine kleine inner class schreiben und diese dann rein geben.
 
Vielen Dank Tom :)

Eine ArrayList ist ja fast wie ein Vektor.

Aus der Manpage von AarrayList:
This class is roughly equivalent to Vector, except that it is unsynchronized
Unsynchronisiert? Wie ist das zu verstehen?

Gruss
jeipack

/e:
Auch dir vielen Dank Matthias. Klingt vielversprechend =)
 
Zuletzt bearbeitet:
synchronisiert: nur 1 Thread kann auf die Daten zugreifen/manipulieren, die anderen müssen erst warten

Das heißt einfach, wenn du an der Arraylist was änderst solltest du das synchronisiert machen, da es sonst zu nicht vorhersehbaren Fehlern kommen kann, da mehrere gleichzeitig auf die Daten zugreifen können. Dafür ist die ArrayList schneller beim Zugriff.
Beim Vector sind alle Manipulationsmethoden schon synkronisiert, so das sowas nicht vorkommen kann.
Aber mich interessiert selbst, ob eine 1 Thread Applikation eine Synchroniesierung überhaupt braucht?
 
Also wenn ich dass richtig verstanden habe braucht eine Einthread App keine synchronisation..


vielen Dank für die Antworten, Frage ist somit erledigt =)
 
Zurück