Sortierter assoziativer Speicher mit Filter

Status
Nicht offen für weitere Antworten.

TSH

Bekanntes Mitglied
...oder auch "Eier legende Wollmilchsau"...

Ich suche nach einem Java-Datentyp, mit dem ich folgendes machen kann:

- Er soll key/value Paare beinhalten, so dass ich direkt auf ein Element mit dessen key zugreifen kann.
- Er soll mir eine Untermenge aller Einträge zurückgeben, auf die ein bestimmtes Kriterium zutrifft.
- Diese Untermenge möchte ich sortieren können.

Beispiel:

In der Liste sollen verschiedene Tiere und deren Alter gespeichert werden:

- key: "Agatha" / Typ: Katze / Value: 3
- key: "Bello" / Typ: Hund / Value: 2
- key: "Coco" / Typ: Affe / Value: 5
- key: "Dagobert" / Typ: Hund / Value: 4

Jetzt müsste ich einerseits direkt per Name auf das Alter zugreifen können, aber auch zB alle Hunde geordnet nach Alter ausgeben.

Weiss da jemand eine Lösung? Geht das in einer einzigen Datenstruktur?
 

masta // thomas

Bekanntes Mitglied
Theoretisch geht das mit einer stinknormalen Liste. Du musst einfach nur die entsprechenden Methoden implementieren, z.B. getAllAnimalsByAge() oder getAgeByAnimal(). Etwas vorgefertigtes, was all das erfüllt, gibt es leider nicht.
 

TSH

Bekanntes Mitglied
Hm, danke. Aber bei einer Liste wird die Methode getAge("Bello") ja ziemlich unperformant, weil ich keinen Zugriff über den Schlüssel bekomme, sondern suchen muss.

Da wäre dann wohl eine TreeMap als Ausgangspunkt besser, oder? Der kann ich auch einen Comparator nach Alter mitgeben. So war auch mal mein Ansatz. Aber das Filtern nach Typ ist hier wiederum nicht performant.

Ich müsste dann doch alle Schlüssel durchgehen und nur die Hunde zurückgeben. Das will ich eigentlich vermeiden. Kann ich das irgendwie?
 

Marco13

Top Contributor
Es gibt oft einen Tradeoff zwischen Effizienz und Speicherverbrauch. Wenn das Abfragen der "Menge aller Hunde" wirkllich zeitkritisch ist, könnte man eine Klasse machen, die bei jedem
add(waldi)
einfach ein
map.put(waldi.name,waldi.alter);
an eine TreeMap<String, Integer> weiterreicht, und zusätzlich das übergeben Objekt in einer (sortierten) Menge ablegt, auf die man mit der Klasse "indiziert" zugreifen kann.
Code:
HashMap<Class, Set<Tier>> typeMap = ...
...
Set<Tier> setOfDogs = typeMap.get(Hund.class); 
...
setOfDogs.add(waldi);
 

TSH

Bekanntes Mitglied
Die Tiere werden beim Systemstart aus einer externen Quelle eingelesen. Es gibt nur die Klasse Tier, erst nach dem Einlesen ist klar, welche Tierarten es gibt. An Daten steht zur Verfügung:

- Tiername (URI. String a la "http://mydomain.com/animals#bello")
- Tiernart (URI. String a la "http://mydomain.com/animals#dog")
- Statt Alter nehmen wir besser etwas, dass sich dauernd ändert, z.B. "Marktwert" = 10.00 (Float)

Das reale Szenario ist etwas komplizierter und hat nichts mit Tieren zu tun. Ich mach das nur aus Gründen der Übersicht.

Wie komm ich nun in meiner Datenstruktur halbwegs effizient an alle Hunde zu. Müsste ich tatsächlich eine 2. Datenstruktur aufmachen, die den String "http://mydomain.com/animals#dog" auf eine Liste aller Hunde, den String "http://mydomain.com/animals#cat" auf die Liste aller Katzen usw. mapped? Und dann regelmäßig alle diese Listen sortieren?

Dann könnte ich wenigstens bei der ersten Struktur bei einer einfachen Hashtable bleiben, die nur "http://mydomain.com/animals#bello" auf ein Float-Objekt abbildet (auf float darf ich nicht abbilden, oder? Besser Float oder Double nehmen?).

Wäre es sinnvoll, für so etwas auf eine interne Datenbanklösung zurück zu greifen? Mit so etwas habe ich allerdings noch nie gearbeitet. Könnte man dann einfach mit SQL-artigen Statements alle Hunde zurückgeben lassen?
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Delete bei sortierter LinkedList Allgemeine Java-Themen 5
R Assoziativer Speicher welche Unterschiede? Allgemeine Java-Themen 5
C Virtueller Speicher Allgemeine Java-Themen 36
sascha-sphw Auf GoPro Speicher zugreifen Allgemeine Java-Themen 10
TheJavaKid Mit Java die Festplatte mit dem meisten freien Speicher finden Allgemeine Java-Themen 7
J Strings int textdokumente speicher Allgemeine Java-Themen 3
M Eine Datei im Speicher erneut laden(?) Allgemeine Java-Themen 1
L Input/Output Datei in den Speicher lesen. Allgemeine Java-Themen 9
Thallius Wie mache ich eine Java App mit Icon startbar die mehr Heap Speicher braucht? Allgemeine Java-Themen 3
P Große Datenstruktur im Speicher halten Allgemeine Java-Themen 13
H Frage wegen Heap-Speicher Allgemeine Java-Themen 2
M Speicher der VM Allgemeine Java-Themen 4
W PDFBox "Nicht genügend Speicher" Allgemeine Java-Themen 2
S Speicher-Problem Allgemeine Java-Themen 4
C Strings und JSON Objekte so klein wie möglich im Speicher ablegen Allgemeine Java-Themen 5
V Input/Output BufferedI/OStream leert den Speicher Allgemeine Java-Themen 7
G Speicher erhöhen Allgemeine Java-Themen 10
R Programm frisst 'Virtuellen Speicher' wie PacMan Allgemeine Java-Themen 4
P Java Anwendung mehr Speicher zur Verfügung stellen?? Allgemeine Java-Themen 3
A 2D-Grafik 2MB jpg wird zu 300MB im speicher (fehler) Allgemeine Java-Themen 8
E Speicherverwaltung bzw. Speicher wieder frei geben?! Allgemeine Java-Themen 8
D Speicher beim Start zuweisen Allgemeine Java-Themen 10
S Bei Sortierung Speicher zu gering? Allgemeine Java-Themen 8
hdi Was frisst in meinem Programm den Speicher / verschlechtert die Performance Allgemeine Java-Themen 11
S Jar Datei mit mehr Speicher starten Allgemeine Java-Themen 2
S JAR Datei, mehr Speicher bereitstellen Allgemeine Java-Themen 5
S Viele Bilder -> Speicher ausgelastet? / (De-)serialisierung geht nicht mehr richtig Allgemeine Java-Themen 8
E Speicher frei machen (List) Allgemeine Java-Themen 9
J Speicher Probleme vorbeugen Allgemeine Java-Themen 8
C Laden / Speicher Allgemeine Java-Themen 8
R Eigener Assoziativ-Speicher Allgemeine Java-Themen 7
S Zugesicherter Speicher der jvm nach Programmstart erhöhen Allgemeine Java-Themen 6
G FIFO Speicher nachbilden Allgemeine Java-Themen 2
G restlichen freien Speicher ermitteln? Allgemeine Java-Themen 3
M Variablen Speicher wieder freigeben ? Allgemeine Java-Themen 9
J Wieviel Speicher maximal? Allgemeine Java-Themen 14
L JVM: Speicher wieder für OS freigeben? Allgemeine Java-Themen 5
M Heap Speicher voll bei spezieller Resize Methode Allgemeine Java-Themen 5
R Gibt es eine JVM, die besser mit dem Speicher umgeht? Allgemeine Java-Themen 7
F OutOfMemoryError: Java heap space - Speicher verändern Allgemeine Java-Themen 8
O Datei im Speicher halten Allgemeine Java-Themen 4
C Speicher Problem Allgemeine Java-Themen 3
S TreeSet benötigt zu viel Speicher Allgemeine Java-Themen 5
J Out Of Memory - Speicher vergrößern? Allgemeine Java-Themen 2
L Nutzt Java bei Start der VM übermäßig viel Speicher? Allgemeine Java-Themen 3
F CPU auslastung wenn Speicher mit -Xmx erhöht Allgemeine Java-Themen 4
S Auslagerungsdatei (Speicher) werde voll Allgemeine Java-Themen 2
G Panel mit vielen Komponenten verbraucht viel Speicher Allgemeine Java-Themen 3
S Speicher Allgemeine Java-Themen 2
m@nu doppelte daten im speicher? Allgemeine Java-Themen 2
G Speicher Allgemeine Java-Themen 3
H wie viel speicher braucht eigentlich ein array? Allgemeine Java-Themen 2
A Speicher/Anzeige Problem in JTable Allgemeine Java-Themen 2
D Speicher der VM für ausführbares Jarfile erhöhen Allgemeine Java-Themen 4
D Eine geladene Klasse aus dem Speicher holen? Allgemeine Java-Themen 9
J in file schreiben frisst den speicher Allgemeine Java-Themen 5
P benötigter Speicher für Objekt Allgemeine Java-Themen 5
D Wieviel Speicher kann die VM verwalten? Allgemeine Java-Themen 18
C Über C/C++ (JNI) angeforderten Speicher wieder frei geben Allgemeine Java-Themen 3
H Speicher freigeben klappt nicht bei Image Objekten, warum? Allgemeine Java-Themen 8
B Kostet das speichern von Variablen zusätzlichen speicher? Allgemeine Java-Themen 2
T Speicher für die VM ändern Allgemeine Java-Themen 17
S Static + Speicher + Bytecode etc. Brauche HILFE :/ Allgemeine Java-Themen 11
H Wie Cpu- und Speicher- Auslastung in Java auslesen Allgemeine Java-Themen 4
F Verfügbaren Heap-Speicher setzen Allgemeine Java-Themen 2
C RAM Speicher in Datei auslagern (Java Swapping) Allgemeine Java-Themen 4
N Speicher Problem bei grossem Heap Allgemeine Java-Themen 15
S Speicher reservieren Allgemeine Java-Themen 5
R nichtmehr benötigtes BufferedImages aus dem Speicher entfern Allgemeine Java-Themen 4

Ähnliche Java Themen

Neue Themen


Oben