zweiseiteige HashMap

Status
Nicht offen für weitere Antworten.
I

ich²

Gast
Hallo Forum,

gibt es eine "zweiseitige" HashMap? Also praktisch eine HashMap, bei der ich nach key und value suchen kann? Ich kann gewährleisten, dass schlüssel sowie key nur einmal vorkommen.

danke!

mfg

ich²
 
I

ich²

Gast
Hi,

hab ich momentan auch so, aber da beiden in der paintComponent Methode befüllt werden müssen halte ich zwei für nicht gerade Performant. Aber trotzdem danke!

mfg

ich²
 
B

bygones

Gast
öh - du kannst in einer normalen Map beidseitig suchen... gibt ja die contains Methoden...
den value dann halt über das entry set iterierend bekommen
 

Illuvatar

Top Contributor
Hab mal ne kleine Hilfsklasse geschrieben, die dir vielleicht helfen könnte. Ist teilweise nicht so toll, für meine Zwecke hatte das halt ausgereicht, aber wäre ja noch ausbaufähig ;)

Code:
	/**
     * Map which allows access either with A or with B. 
     * There are used TreeMaps inside, thus the Maps will be sorted.
     * If there are several equal A or B they will be put in a List.
     * All methods in this class are synchronized.
     * There is no remove method, because it would destroy the equality of the inner maps.
     */
	public class DoubleMap<A,B>
	{
		private Map<A,ArrayList[B]> mapAB = new TreeMap<A,ArrayList[B]>();
		private Map<B,ArrayList<A>> mapBA = new TreeMap<B,ArrayList<A>>();
		public synchronized void put (A a, B b)
		{
			if (mapAB.get(a) == null){
				mapAB.put(a, new ArrayList[B]());
			}
			mapAB.get(a).add (b);
			if (mapBA.get(b) == null){
				System.out.println ("PUT NEW B");
				mapBA.put(b, new ArrayList<A>());
			}
			mapBA.get(b).add(a);
		}
		public synchronized void clear()
		{
			mapAB.clear();
			mapBA.clear();
		}
		public synchronized List<A> getAforB (B b)
		{
			return mapBA.get(b);
		}
		public synchronized List[B] getBforA (A a)
		{
			return mapAB.get(a);
		}
		public synchronized Set<A> getASet()
		{
			return mapAB.keySet();
		}
		public synchronized Set[B] getBSet()
		{
			return mapBA.keySet();
		}
		public synchronized boolean isEmpty()
		{
			return mapAB.isEmpty();
		}
	}
 

Ralf Ueberfuhr

Bekanntes Mitglied
ich² hat gesagt.:
hab ich momentan auch so, aber da beiden in der paintComponent Methode befüllt werden müssen halte ich zwei für nicht gerade Performant. Aber trotzdem danke!

Ich halte das für genauso performant, denn der zweimalige Aufruf von HashMap.put dauert nicht wesentlich länger. Und beim Suchen nach Einträgen suchst du ja nicht in beiden Maps.

@illuvatar:

Wäre es nicht geschickter, den HashMap-Typ zu erweitern und die entsprechenden Methoden zu überschreiben?
(Also eine HashMap mit einer inversen HashMap.)
 
B

bygones

Gast
masseur81 hat gesagt.:
Wäre es nicht geschickter, den HashMap-Typ zu erweitern und die entsprechenden Methoden zu überschreiben?
(Also eine HashMap mit einer inversen HashMap.)
ne du erweiterst ja nicht HashMap methoden (als einziges vll die put methode)
 
I

ich²

Gast
Hi, danke für die Antworten

masseur81 hat gesagt.:
Ich halte das für genauso performant, denn der zweimalige Aufruf von HashMap.put dauert nicht wesentlich länger. Und beim Suchen nach Einträgen suchst du ja nicht in beiden Maps.

Naja, ich muss sie auch jedesmal nochmal in der paint löschen und ich hätte dann nur einen put nämlich Value und Value ;).

@ Illuvater

danke, werd ich mir mal anschauen, aber wenn dann werd ich mir das selber schreiben, da ist der lerneffekt größer ;).

mfg

ich²
 

Ralf Ueberfuhr

Bekanntes Mitglied
deathbyaclown hat gesagt.:
masseur81 hat gesagt.:
Wäre es nicht geschickter, den HashMap-Typ zu erweitern und die entsprechenden Methoden zu überschreiben?
(Also eine HashMap mit einer inversen HashMap.)
ne du erweiterst ja nicht HashMap methoden (als einziges vll die put methode)

Na doch. Im Prinzip ist es eine 2seitige HashMap.

Also in etwa so:

Code:
public class DoubleMap<A,B> extends HashMap<A,B> {

  private HashMap<B,A> inverseMap = new HashMap<B,A>();

  public void clear() {
    super.clear();
    inverseMap.clear();
  }

  public B put(A a, B b) {
    inverseMap.put(b,a);
    return super.put(a, b);
  }

  public B remove(A a) {
    final B b = super.remove(a);
    inverseMap.remove(b);
    return b;
  }

  /* Die ist neu:
   * nur "get(B b)" müsste eine Fehlermeldung geben, da A==B sein könnte
   */
  public A getKey(B b) {
    return inverseMap.get(b);
  }

}

An die Kenner: Würde man solche Methoden besser als "synchronized" kennzeichnen?
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
krgewb remove beim Iterieren einer HashMap Java Basics - Anfänger-Themen 3
F Java Object to Hashmap ? Java Basics - Anfänger-Themen 6
S HashMap mehrere Keys zu einem Value Java Basics - Anfänger-Themen 3
A Daten aus einer HashMap aus einer DB speichern und mit neuen Werten vergleichen Java Basics - Anfänger-Themen 8
T HashMap Lsite gibt die sachen nicht aus wie gewollt. Java Basics - Anfänger-Themen 3
krgewb HashMap Java Basics - Anfänger-Themen 2
B Hashmap richtig bauen, die Tripel auf Zahl abbildet? Java Basics - Anfänger-Themen 10
"java.util.HashMap.get(Object)" is null Java Basics - Anfänger-Themen 10
berserkerdq2 Hashmap, wie prüfe ich ob ein Key schon existiert Java Basics - Anfänger-Themen 19
S Durch HashMap iterieren Java Basics - Anfänger-Themen 8
rafi072001 Sortieren einer HashMap nach Values Java Basics - Anfänger-Themen 2
F gson mit einer Hashmap Java Basics - Anfänger-Themen 2
J JSON-HashMap Java Basics - Anfänger-Themen 3
J Hashmap Java Basics - Anfänger-Themen 13
C Hashmap zickt Java Basics - Anfänger-Themen 9
S HashMap contains() Methode Java Basics - Anfänger-Themen 1
Z Satz aufteilen und die Wörter zählen (HashMap) Java Basics - Anfänger-Themen 15
N enum Attribut von Objekten einer Hashmap ausgeben Java Basics - Anfänger-Themen 6
P Verschachtelte Hashmap Java Basics - Anfänger-Themen 6
I Sortiert eine HashMap nicht gleich wie eine ArrayList? Java Basics - Anfänger-Themen 1
B HashMap alphabetisch sortieren Java Basics - Anfänger-Themen 2
J HashMap Java Basics - Anfänger-Themen 6
M Enum-Variable HashMap zuweisen Java Basics - Anfänger-Themen 5
U Hashmap Iterator selbst implementieren Java Basics - Anfänger-Themen 10
N HashMap in List good practice? Java Basics - Anfänger-Themen 2
K Value eines HashMaps in einer HashMap wiedergeben. Java Basics - Anfänger-Themen 5
O Hashmap, ArrayList, LinkedList Java Basics - Anfänger-Themen 7
O HashMap - ArrayList Java Basics - Anfänger-Themen 29
J Hashmap langsamer als compareTo? Java Basics - Anfänger-Themen 23
E HashMap+Vererbung Java Basics - Anfänger-Themen 11
J Erhöhen eines Values als Integer bei gleichen Keys in HashMap Java Basics - Anfänger-Themen 12
N Methoden HashMap interne Werte miteinander vergleichen Java Basics - Anfänger-Themen 7
W The type Long is not visible HashMap Java Basics - Anfänger-Themen 4
M Objekt mit Hashmap vergleichen Java Basics - Anfänger-Themen 22
S Gibt es für die Klasse HashMap Generic Implementierungen? Java Basics - Anfänger-Themen 11
C HashMap - alle keys haben values der letzten put-Anweisung Java Basics - Anfänger-Themen 3
J Hashmap auslesen Java Basics - Anfänger-Themen 7
F HashMap sortieren <String, Long> Java Basics - Anfänger-Themen 3
GreenTeaYT HashMap dupliziert meine Elemente? Java Basics - Anfänger-Themen 2
shiroX Methoden Morse-Code Übersetzer mit HashMap Java Basics - Anfänger-Themen 5
E HashMap Problem Java Basics - Anfänger-Themen 5
P Hashmap anstatt LinkedList? Java Basics - Anfänger-Themen 6
T HashMap und die Methoden Java Basics - Anfänger-Themen 13
N Methoden Interaktives PDF mit HashMap befüllen Java Basics - Anfänger-Themen 0
Z Hashmap auseinandernehmen und analysieren Java Basics - Anfänger-Themen 7
B Durchlaufen von Hashmap und Arraylist Java Basics - Anfänger-Themen 8
F HashMap oder welches Array? Java Basics - Anfänger-Themen 4
T HashMap Java Basics - Anfänger-Themen 24
L Hashmap mit variablem Key Java Basics - Anfänger-Themen 9
M Collections Probleme mit Hashmap Java Basics - Anfänger-Themen 4
N Collections String in HashMap umwandeln Java Basics - Anfänger-Themen 3
Z HashMap richtig benutzen Java Basics - Anfänger-Themen 2
lgund HashMap // TS3 Query Java Basics - Anfänger-Themen 7
Z Hashmap Iterator löscht nicht Java Basics - Anfänger-Themen 8
E Hashmap Wert auslesen Java Basics - Anfänger-Themen 2
S Printstream für einen Hashmap Loop Java Basics - Anfänger-Themen 1
dat_vin OOP Hashmap und Attribute Java Basics - Anfänger-Themen 7
C Check ob eine HashMap schon existiert Java Basics - Anfänger-Themen 16
G Vererbung Eigene HashMap Variante Java Basics - Anfänger-Themen 2
R Hashmap in anderer Klasse nicht benutzbar Java Basics - Anfänger-Themen 1
T Java Hashmap Java Basics - Anfänger-Themen 3
L Gibt es etwas wie "HashMap <String, String, String> Java Basics - Anfänger-Themen 9
K HashMap mit Daten aus ArrayList befüllen Java Basics - Anfänger-Themen 14
S OOP Klasse mit static-Eigenschaften - HashMap füllen Java Basics - Anfänger-Themen 6
O HashMap Fragen Java Basics - Anfänger-Themen 8
T HashMap Werte einfügen, durchsuchen und auslesen Java Basics - Anfänger-Themen 17
M Semantisches Problem HashMap/Netzwerk Java Basics - Anfänger-Themen 4
D HashMap Keys durchlaufen Java Basics - Anfänger-Themen 2
B Zugriff auf csv-Datei per hashmap Java Basics - Anfänger-Themen 5
M HashMap keys ausgeben Java Basics - Anfänger-Themen 2
S In einer Hashmap Klassen regestrieren Java Basics - Anfänger-Themen 2
H Collections Was ist schneller - HashMap + Sort v TreeMap? Java Basics - Anfänger-Themen 75
F HashMap nach kleinstem Value durchsuchen Java Basics - Anfänger-Themen 11
G HashMap Java Basics - Anfänger-Themen 6
F Wortpaare - HashMap - ArrayList Java Basics - Anfänger-Themen 6
M HashMap Frage Java Basics - Anfänger-Themen 3
M HashMap - put() reagiert nicht? Java Basics - Anfänger-Themen 8
N Cast eines Objektes in eine Hashmap Java Basics - Anfänger-Themen 13
A CSV Zeilenweise einlesen und in einer HashMap speichern Java Basics - Anfänger-Themen 12
A Input/Output Hashmap in einem JPanel via JList anzeigen Java Basics - Anfänger-Themen 8
K HashMap auf leere Key-Value-Paare prüfen Java Basics - Anfänger-Themen 14
F Hilfe bei der HashMap. Java Basics - Anfänger-Themen 3
F HashMap vs. TreeMap Java Basics - Anfänger-Themen 5
B HashMap Java Basics - Anfänger-Themen 9
C Collections String[] als value in HashMap Java Basics - Anfänger-Themen 6
V Hashmap Iterieren Java Basics - Anfänger-Themen 4
C Csv File in Hashmap ausgeben Java Basics - Anfänger-Themen 14
T HashMap<String,Object> Werte auslesen Java Basics - Anfänger-Themen 5
I HashMap sortieren Java Basics - Anfänger-Themen 10
I HashMap Java Basics - Anfänger-Themen 11
H Collections Brauche modifizierte HashMap Java Basics - Anfänger-Themen 6
H TreeMap/HashMap synchronisieren Java Basics - Anfänger-Themen 2
A Datentypen Hashmap to Array Java Basics - Anfänger-Themen 11
D HashMap überschreibt Werte Java Basics - Anfänger-Themen 7
pg1337 Interface Comparable-Interface bei HashMap Java Basics - Anfänger-Themen 21
D erweiterte hashmap Java Basics - Anfänger-Themen 5
H HashMap<Int, String> - Er findet die Int-Klasse nicht. Java Basics - Anfänger-Themen 3
L HashMap zu JList Java Basics - Anfänger-Themen 6
S Erste Schritte HashMap Kurze Frage - Werte über Schleife ausgeben Java Basics - Anfänger-Themen 30
F Collections ArrayList oder Hashmap mittel Collections.sychronised Java Basics - Anfänger-Themen 6

Ähnliche Java Themen

Neue Themen


Oben