2 Maps synchron halten

Status
Nicht offen für weitere Antworten.

RoNa

Bekanntes Mitglied
Hallo,

ich habe folgendes Problem:

Ich muss 2. Maps synchron halten. D.h. wenn das hinzufügen in der ersten Map klappt, darf die 2. Map auch einen einein Eintrag bekommen. Beim Fehler in Schritt 2, muss der Eintrag aus der ersten Map raus. Beim Entfernen der Einträge soll das Verhalten auch entsprechend sein.

Kann mir jemand einen Tipp geben?

Gruß,

Robert
 

0x7F800000

Top Contributor
1) was meinst du mit "darf"?
2) Was meinst du mit "Fehler im 2. Schritt"
3) In ein und demselben Programm zwei maps zu synchronisieren ist imho eine seltsame idee, wenn in beiden immer das gleiche drinsteht, dann kannst du doch direkt auch eine map nehmen.
 

SegFault

Bekanntes Mitglied
Andrey hat gesagt.:
3) In ein und demselben Programm zwei maps zu synchronisieren ist imho eine seltsame idee, wenn in beiden immer das gleiche drinsteht, dann kannst du doch direkt auch eine map nehmen.

finde ich nicht, ganz im gegenteil. Was ist wenn ich schnell aufgrund zweier verschiedener Keys auf die Map zugreifen will. Z.B. einmal über den namen und andernfalls über z.B. eine Adresse um an Kundendaten zu kommen. Sofern da nun richtig viele Einträge sind sind 2 maps schon sehr sinnvoll. Es sei denn jemanden fällt was besseres ein.

Zu implementation würde ich von Hash_Map der dergleichen ableiten. Der Constructor bekommt ggf eine andere map übergeben welche als referenzierten Wert den gleichen haben muss wie die eigene Map. Ansonsten müssen dann halt noch die insert und delete methoden überladen werden. Du kannst ja die eigentliche super methode aufrufen und dann in der zweiten map das element auch löschen.

Mal ganz fixer quasi code
Code:
public class referencedMap<K,V> extends HashMap<K,V>
{
    private HashMap reference = null
    referencedMap(HashMap<?,V>  reference)
    {
         this.reference = reference;
    }

    public void put(K key, V value)
    {
          super.put(key,value);
          reference.put(/**hier ggf den key anpassen*/,value);
    }

   ...//Weitere einfüge und löschfunktionen
}
 

RoNa

Bekanntes Mitglied
Danke sehr für die gute Idee.

Es ist genau so bei mir: ich muss über verschiedene Keys auf die Einträge zugreifen. Ich hoffte auf JakartaCommonsColleactions, aber da hab' ich nix gefunden ;-(
 

0x7F800000

Top Contributor
Achje. Du willst also im Prinzip einen haufen Values haben, auf die du über verschiedene Arten von Schlüsseln zugreifen kannst? Ist im voraus bekannt, wieviele Arten von schlüsseln es sind? Ist vielleicht ein "array an teilweise zu erfüllenden bedingungen" ein schlüssel? Dann würde ich vorschlagen, mehrere Maps zu einer größeren Datenstruktur zusammenzufassen: entweder verschachtelt, oder parallel. Beschreibe mal die Situation etwas genauer, dann kann man dir auch genauere Antwort geben ;) Aber ich muss leider warnen, dass das was du willst wahrscheinlich nicht zu schnell funktionieren wird, weil Maps halt nur in eine Richtung gut funktionieren, wenn beide schlüssel nicht gleichzeitig zur verfügung stehen, muss man dann die gesamte struktur durchgehen, und nach value vergleichen, das dauert. Aber wie gesagt: schreib ein wenig genauer wie du es haben möchtest.
 

Murray

Top Contributor
robertnac hat gesagt.:
Ich muss 2. Maps synchron halten. D.h. wenn das hinzufügen in der ersten Map klappt, darf die 2. Map auch einen einein Eintrag bekommen. Beim Fehler in Schritt 2, muss der Eintrag aus der ersten Map raus. Beim Entfernen der Einträge soll das Verhalten auch entsprechend sein.
Code:
public synchronized void syncAdd( /* ... */ ) {
   /* add to map1 */
   try {
     /* add to map 2 */
   } catch ( Exception e) {
     /* remove from map 1 */
   }
}

public synchronized void syncRemove( /* ... */ ) {
   /* remove from map1 */
   try {
     /* remove from map 2 */
   } catch ( Exception e) {
     /* add to map 1 */
   }
}
 

didjitalist

Bekanntes Mitglied
deine syncAdd methode suggeriert, dass das einfügen fehlschlagen kann. deine syncRemove methode, dass entfernen fehlschlagen kann. deine "sicherheitsmechanismen" sind dadurch überflüssig, da sie weiterhin inkonsistenzen zulassen.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
T Google Maps API nächste Person Allgemeine Java-Themen 5
L Java und Javascript um Distanz über Google Maps zu berchnen Allgemeine Java-Themen 10
P Erste Schritte Suche in ArrayList mit Maps Allgemeine Java-Themen 4
G Collections PropertyChange bei Maps Allgemeine Java-Themen 14
S Frage: Google Maps "Map" in Java Allgemeine Java-Themen 3
D generische Klasse für alle Maps (nicht Collections :-)) Allgemeine Java-Themen 11
K Namenskonvention für Maps? Allgemeine Java-Themen 5
nrg Ordnung Maps Allgemeine Java-Themen 9
turmaline Gleichheit von zwei Maps Map <String, Map <String, String>> Allgemeine Java-Themen 30
algorismi Google maps in Java Swing Allgemeine Java-Themen 2
M Google Maps mit Java Allgemeine Java-Themen 5
C Frage zu Sets und Maps Allgemeine Java-Themen 2
N google maps api mit javaserver faces Allgemeine Java-Themen 5
D 3 Audiofiles synchron playen aber nur eine hören Allgemeine Java-Themen 3
kaoZ Best Practice Shared Actions , Referenzen in Gui halten ? Allgemeine Java-Themen 25
P Große Datenstruktur im Speicher halten Allgemeine Java-Themen 13
B Threads halten sich irgendwie auf... Allgemeine Java-Themen 6
Farbtopf Lehrstunde in Schule halten Allgemeine Java-Themen 14
P Datentypen Große Datenmenge Sortiert halten Allgemeine Java-Themen 12
J Eigenes Produkt Upgrade / Update-fähig halten? Allgemeine Java-Themen 16
L Session auf einer Webseite halten Allgemeine Java-Themen 6
sliwalker Designfrage: Dateninhalte in Komponenten variabel halten Allgemeine Java-Themen 4
O Datei im Speicher halten Allgemeine Java-Themen 4

Ähnliche Java Themen

Neue Themen


Oben