HashMap Problem

Status
Nicht offen für weitere Antworten.
D

Doc

Gast
Hi Leute,

hab folgendes Problem und zwar möchte ich eine Abbildung von A -> B was ich über eine HashMap realisiere.
Das Objekt A ist der Key und das Object B das Value-Objekt. Nun mein Problem da ich im meinem Programm auch mal das Value-Objekt bekomme möchte ich das dazu gehörige Key-Objekt(also benötige ich auch eine Abbildung von B->A)
Kann mir jemand einen Tipp geben wir das Problem lösen kann. Es muss auch nicht unbedingt eine HashMap sein

danke im voraus
 
G

Gelöschtes Mitglied 5909

Gast
2 hashmaps oder die eine durchlaufen und suchen (langsamer, braucht aber weniger speicher)
 

dayaftereh

Top Contributor
Hey

Also ich habe es mal so gelöst, ist nicht würglich sauber aber es funktonirt:

braucht halt performens:

Example:
Code:
import java.util.HashMap;

import javax.swing.JFrame;

public class Hashmaping extends JFrame{
	
	private static final long serialVersionUID = 1L;
   
	static HashMap<String, String> hashMapping = new HashMap<String, String>();
   
	public static void main(String[] args) {	   
	   makeHashMap();
	   System.out.println(getValue("A"));
	   System.out.println(getKey("D"));
     
	}
	
	public static String getValue(String Value){		
		return hashMapping.get(Value);
	}
	
	public static String getKey(String key){	
		for(String value:hashMapping.keySet()){
			
			if(key.equals(getValue(value))){				
				System.out.println(value);
			}
			
		}
		return null;
	}	
	
	public static void makeHashMap(){
		hashMapping.put("A", "B");
		hashMapping.put("C", "D");		
	}

}

Vielich hilft es :lol: :lol: :lol: :lol:
 

Marco13

Top Contributor
Da zeigt sich wieder mal der Vorteil von Interfaces. Wenn du dir ein Interface "BidirectionalMap" geschrieben hättest, hättest du die gepostete Implementierung verwenden können, und, falls die zu langsam ist, auch die mit zwei HashMaps. Naja. Ist wohl nicht so wichtig.
 

dayaftereh

Top Contributor
Jop, hast recht, habs halt auf die einfache art :lol: :lol: :lol: :lol: :lol: :meld: :applaus: :applaus:
 
D

Doc

Gast
Danke für die Antworten, werde wahrscheinlich beide Varianten ausprobieren und mich dann entscheiden
 

Ariol

Top Contributor
Sowas??

Code:
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;

public class BiDirectionalMap implements Map<Object, Object>
{
	private HashMap<Object, Object>	map	= new HashMap<Object, Object>();

	public void clear()
	{
		map.clear();

	}

	public boolean containsKey(Object key)
	{
		return map.containsKey(key);
	}

	public boolean containsValue(Object value)
	{
		return map.containsValue(value);
	}

	public Set<java.util.Map.Entry<Object, Object>> entrySet()
	{
		return map.entrySet();
	}

	public Object get(Object key)
	{
		return map.get(key);
	}

	public boolean isEmpty()
	{
		return map.isEmpty();
	}

	public Set<Object> keySet()
	{
		return map.keySet();
	}

	public Object put(Object key, Object value)
	{
		Object object1 = map.put(key, value);
		Object object2 = map.put(value, key);

		if (object1 != null)
		{
			return object1;
		}
		else if (object2 != null)
		{
			return object2;
		}
		
		return null;
	}

	public void putAll(Map<? extends Object, ? extends Object> m)
	{
		for(Object key : m.keySet())
		{
			put(key, m.get(key));
		}

	}

	public Object remove(Object key1)
	{
		Object key2 = map.get(key1);
		
		Object object1 = map.remove(key1);
		Object object2 = map.remove(key2);
		
		if (object1 != null)
		{
			return object1;
		}
		else if (object2 != null)
		{
			return object2;
		}
		
		return null;
	}

	public int size()
	{
		return map.size();
	}

	public Collection<Object> values()
	{
		return map.values();
	}

}


Testklasse
Code:
public class MapTest
{
	public static void main(String[] args)
	{
		BiDirectionalMap map = new BiDirectionalMap();
		
		map.put("A", "B");
		
		System.out.println("A ->" + map.get("A"));
		System.out.println("B ->" + map.get("B"));
		
		System.out.println(map.size());
		
		map.put("A", "C");
		
		System.out.println("A ->" + map.get("A"));
		System.out.println("B ->" + map.get("B"));
		System.out.println("C ->" + map.get("C"));
		
		System.out.println(map.size());
	}
}

Ausgabe:
Code:
A ->B
B ->A
2
A ->C
B ->A
C ->A
3
 

Marco13

Top Contributor
Hab's jetzt nicht im Detail nachvollzogen - für bestimmte(!) Fälle könnte das OK sein, aber wenn man das macht, muss man sich GENAU überlegen, welches Verhalten diese Map haben soll. Wenn sie das Map-Interface implementiert ist das zwar vielleicht in manchen Zusammenhängen "praktisch", in anderen kann man aber Probleme mit der Eindeutigkeit bekommen, wenn man nicht weiß, ob das, was man bekommt, ein Key oder eine Value ist. In einem eigenen Interface würde man dann eben getKey(value) und getValue(key)-Methoden anbieten....
 

Ariol

Top Contributor
Das ganze war jetzt natürlich auf sein Problem zusammengebastelt.

Perfekt ist die Lösung natürlich nicht, weil bei doppelten Zuweisungen Probleme entstehen (siehe Ausgabe Testprogramm).


Eine bessere Lösung wäre evtl. die Values als Liste zu verwalten.
 
G

Gelöschtes Mitglied 5909

Gast
probleme wirst du bei der obigen lösung vor allem dann bekommen wenn du A als key und als value haben willst

was liefert dann get("A")

wenn die map größe nicht allzu groß ist würde ich dennoch 2 maps nehmen und bei beiden am anfang die größe grob schätzen um den speicherbedarf ein wenig einzugrenzen
 

Ariol

Top Contributor
Code:
public class MapTest
{
	public static void main(String[] args)
	{
		BiDirectionalMap map = new BiDirectionalMap();
		
		map.put("A", "A");
		
		System.out.println("A -> " + map.get("A"));
		
		System.out.println(map.size());
		
	}
}

Ausgabe:
Code:
A -> A
1
 

Marco13

Top Contributor
:lol:
Gemeint war wohl eher sowas wie
map.put("A", "B");
map.put("C", "A");
System.out.println(map.get("A")); // B oder C?
 

Ariol

Top Contributor
Wenn man sich mal den Code von Hashmap.get() ansieht wird wohl B rauskommen.

Wird ja auch zuerst reingesetzt.
 

tfa

Top Contributor
Keine gute Idee, Values und Keys in einer Map wild durcheinander zu würfel. Warum definierst du nicht eine zweite Map für die Gegenrichtung und kapselst die auch in der Klasse?
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
A HashMap Methode "get()"-Problem Allgemeine Java-Themen 28
J Problem bei Hashmap Key-Abfrage Allgemeine Java-Themen 4
H Problem beim Sortieren einer HashMap mit TreeSet Allgemeine Java-Themen 4
I HashMap Problem... Allgemeine Java-Themen 3
S Problem mit Hashmap Allgemeine Java-Themen 2
OnDemand Java String in Hashmap als Key NULL Allgemeine Java-Themen 27
T HashMap values Bearbeitung Allgemeine Java-Themen 4
T Hashmap Values Bearbeitung Allgemeine Java-Themen 1
JavaJakob22 Bestimmte HashMap importieren Allgemeine Java-Themen 4
killig HashMap mit if-Anweisung überprüfen Allgemeine Java-Themen 4
killig Textdatei einlesen und in HashMap speichern (duplikate entfernen) Allgemeine Java-Themen 12
LimDul Kam eine java.net.URL zu einer HashMap und ging als DNS Anfrage wieder heraus Allgemeine Java-Themen 18
L HashMap Allgemeine Java-Themen 10
X Collections Gibt es eine Klasse welche die Vorteile von List und HashMap vereint, aber konstante Laufzeit (O(1)) hat in Java? Allgemeine Java-Themen 4
B HashMap Duplikate Allgemeine Java-Themen 4
W Array vs. ArrayList vs. HashMap Allgemeine Java-Themen 20
F Tabelle aus CSV, 2 dimensionale HashMap? Allgemeine Java-Themen 4
D Mit Java PHP hashmap lesen Allgemeine Java-Themen 1
H Swing HashMap zu Tabelle macht mir Probleme Allgemeine Java-Themen 4
B HashMap aus Value Key bekommen Allgemeine Java-Themen 2
N HashMap und Methoden richtig einbinden Allgemeine Java-Themen 2
X JSONObject auslesen und in HashMap hinterlegen Allgemeine Java-Themen 16
N Werte aus Hashmap auslesen und übertragen Allgemeine Java-Themen 8
JavaWolf165 JsonObject in HashMap umwandeln Allgemeine Java-Themen 16
R ArrayList und HashMap Allgemeine Java-Themen 7
L Assoziatives Datenfeld, schneller wie Hashmap Allgemeine Java-Themen 35
G Methoden HashMap speichert unter falschen Schlüsseln Allgemeine Java-Themen 6
D Verschachtelte HashMap initializieren Allgemeine Java-Themen 1
L Variablen HashMap nimmt value nicht an Allgemeine Java-Themen 3
R Hierarchie mit HashMap darstellen Allgemeine Java-Themen 19
D Datentypen HashCollision in HashMap Allgemeine Java-Themen 3
Z Concurrent Modification Exception - HashMap (kein remove) Allgemeine Java-Themen 4
B Zugriff auf eine HashMap Allgemeine Java-Themen 4
B Userdaten in Hashmap speichern - Servlet Allgemeine Java-Themen 6
T Hashmap mit geordneter/ungeordneter liste als Value Allgemeine Java-Themen 5
I HashMap key wird nicht erkannt trotz überschriebener equals/hashCode Methode Allgemeine Java-Themen 6
M Füllfaktor einer Hashmap Allgemeine Java-Themen 7
A Collections HashMap.containsKey findet keine immutablen Objekte Allgemeine Java-Themen 3
D Datentypen HashMap Allgemeine Java-Themen 5
R Collections Performance einer HashMap Allgemeine Java-Themen 26
C LinkedList und ArrayList in HashMap Allgemeine Java-Themen 4
T Erste Schritte HashMap<String, int> Allgemeine Java-Themen 2
K Hashmap sortieren Allgemeine Java-Themen 6
F HashMap überschreibt Daten von anderen HashMap Allgemeine Java-Themen 5
S HashMap containsKey liefert immer false zurück Allgemeine Java-Themen 15
K HashMap sorting verhindern Allgemeine Java-Themen 10
J Generic von einer ArrayList/HashMap bekommen Allgemeine Java-Themen 7
L HashMap mit Enum Keys Allgemeine Java-Themen 3
J Array als Schlüssel für HashMap Allgemeine Java-Themen 6
S Geschwindigkeit HashMap oder .getParent Allgemeine Java-Themen 5
V Hashmap-Frage Allgemeine Java-Themen 3
M HashMap - Ich bin verwirrt Allgemeine Java-Themen 3
H2SO3- multiple Hashmap Allgemeine Java-Themen 5
K Threading - schreiben auf Hashmap/löschen - ConcurrentModificationException Allgemeine Java-Themen 3
J NullPointerException mit HashMap Allgemeine Java-Themen 2
V Probleme mit eigener Hashmap Allgemeine Java-Themen 10
N HashMap<String,Vector<String>> a = new HashMap<String,Vector<String>>(); Allgemeine Java-Themen 4
C HashMap Allgemeine Java-Themen 12
Daniel_L Map/HashMap - Reihenfolge von Einträgen Allgemeine Java-Themen 4
L HashMap Key Reihenfolge umkehren Allgemeine Java-Themen 8
N wie greife ich auf hashmap in vector zu Allgemeine Java-Themen 9
J Inhalt von HashMap vergleichen Allgemeine Java-Themen 3
Z Serialisierung und Deserialisierung einer HashMap Allgemeine Java-Themen 17
P Wieso HashMap-Zugriff mit Object, statt mit MyObject? Allgemeine Java-Themen 12
K Serialisierung von Hashmap in Vector Allgemeine Java-Themen 3
T Hashmap füllen mit rs sortierung Allgemeine Java-Themen 9
D HashMap sortieren Allgemeine Java-Themen 2
P Große Datenmenge wie speichern (HashMap? TreeMap?) Allgemeine Java-Themen 11
G Runnables aus Hashmap starten Allgemeine Java-Themen 4
J java.util.ConcurrentModificationException bei HashMap? Allgemeine Java-Themen 2
G HashMap key ändern Allgemeine Java-Themen 5
L HashMap / Objekte auf Festplatte zur Laufzeit auf HD swappen Allgemeine Java-Themen 7
G Datei einlesen und in HashMap verarbeiten Allgemeine Java-Themen 3
E Auslesen aus Hashmap Allgemeine Java-Themen 3
P HashMap mit mehreren gleichen keys Allgemeine Java-Themen 4
alexpetri hashmap bästpractice Allgemeine Java-Themen 4
J HashMap mit Webservice realisierbar? Allgemeine Java-Themen 4
ARadauer hashmap vs hastable Allgemeine Java-Themen 5
T HashMap#values Reihenfolge Allgemeine Java-Themen 13
M ArrayList sortieren - HashMap mit sort_id vorhanden Allgemeine Java-Themen 2
L Wie kann ich eine HashMap abspeichern? Allgemeine Java-Themen 3
T HashMap (String, Object(String , int)) nach int sortieren Allgemeine Java-Themen 7
M HashMap kapselt zwei Objekte aber wie baut man eine Matrix? Allgemeine Java-Themen 2
E MySQL-Datenbank <-> HashMap/TreeMap Allgemeine Java-Themen 1
P List in Hashmap schreiben Allgemeine Java-Themen 5
M Threads in einer Hashmap Allgemeine Java-Themen 5
P HashMap an 2 Stellen veränderbar Allgemeine Java-Themen 13
P HashMap auflösen Allgemeine Java-Themen 9
MQue HashMap durchlaufen Allgemeine Java-Themen 2
MQue HashMap Allgemeine Java-Themen 2
M HashMap kommt beim Löschen aus dem Tritt Allgemeine Java-Themen 6
MQue HashMap Allgemeine Java-Themen 6
MQue HashMap Allgemeine Java-Themen 9
MQue Sichtbarkeit/HashMap/NullPointerexception Allgemeine Java-Themen 2
B HashMap.containsKey. Allgemeine Java-Themen 10
J byte-Array in Hashmap speichern? Allgemeine Java-Themen 3
S Klasse in HashMap speichern Allgemeine Java-Themen 3
G [quote]the type HashMap is not generic; it cannot be paramet Allgemeine Java-Themen 4
M HashMap sortiert Allgemeine Java-Themen 6
G Performance JDOM - DOM - eigene HashMap (SAX) Allgemeine Java-Themen 2

Ähnliche Java Themen

Neue Themen


Oben