Effiziente Suche in HasMap?

trench140

Mitglied
Hallo allerseits,

ich programmiere gerade eine kleinere Anwendung und stehe gerade vor folgendem Problem:

Um meine Daten zu speichern habe ich mich an der Struktur von SQL-Datenbanken/Tabellen orientiert. Eine direkte Verwendung von SQL kam nicht in Frage da ich, falls sich das Tool als nützlich erweist, es auch gerne öffentlich machen möchte und keinem zumuten möchte, einen SQL-Server installieren zu müssen.

Auf "Tabellen"-Ebene habe ich nun beispielsweise folgende Konstrukte:

Code:
public class DatabaseDateEntry {
	private int id;
	private String dateValue;
	
	public DatabaseDateEntry() {
		
	}
...
}

...

public class DatabaseDateTable {
	private HashMap<Integer, DatabaseDateEntry> dateEntries;
	private int count;
	
	public DatabaseDateTable() {
		count = 0;
		dateEntries = new HashMap<Integer, DatabaseDateEntry>();
	}
...
}

Heißt, eine "Tabelle" besteht aus einer bestimmten Anzahl an "Einträgen", welche die gewünschten Informationen beinhalten. Jeder Eintrag hat hierbei eine eindeutige ID und einen Wert, in der HashMap refernziert diese ID das komplette Eintrags-Objekt.

Mein Problem ist nun, dass sowohl schnell überprüfen möchte, ob ein bestimmter Wert in der HashMap enthalten ist und dass ich basierend auf der Id schnell auf einzelne Einträge zugreifen möchte. Der letzte Fall ist ja dadurch abgehandelt, dass die Id als Key der HashMap gehandhabt wird. Wie aber kriege ich den ersten Fall hin? Aktuell fällt mir nur die quick&dirty-Methode ein:
Alle Einträge der HashMap auslesen, bis eine Übereinstimmung erzielt wird.
Eine weitere Möglichkeit wäre es, den Wert als Key zu nehmen, dann habe ich aber das gleiche Problem für die IDs.

Gibt es hier irgendeine bessere Möglichkeit? Ist hier die HashMap vielleicht schlecht gewählt? Sollte ich eine andere Datenstruktur verwenden?

Die oben gezeigten Konstrukte sind nur exemplarisch, mir ist klar, dass ich bei Einträgen mit nur zwei Werten die Zuordnung <ID,Object> in <ID,Value> ändern könnte, ich habe aber auch Eintrags-Typen, die eben mehr als nur einen Value haben können.
 

zeja

Erfahrenes Mitglied
Öhm man muss keinen SQL-Server installieren nur um eine Datenbank anzubieten. Mit Java DB/Derby oder HSQLDB kannst du Datenbanken embedded in deiner Java Applikation verwenden und auch mit ausliefern.
 

trench140

Mitglied
Vielen lieben Dank, ich wusste nicht, dass so etwas geht, ich hab jetzt etwas mit Derby rumgespielt und es ist wirklich sehr komfortabel, das werde ich ab jetzt nutzen.
 

vogella

Mitglied
Hallo,

ich bin mir nicht sicher, ob ich Deine Frage richtig verstanden habe, aber
in der HashMap kannst Du über contains überprüfen, ob der Wert existiert.

HashMap<Integer, String> map= new HashMap<Integer, String>();
map.containsKey(key)

War das Deine Frage?

Viele Grüße, Lars