Multidimensionales Array ohne linare Reihenfolge!

Friedhelm

Bekanntes Mitglied
So, ich habe ein Problem, bei dem ich nach Stunden nachdenken und Googlen nicht weiterkomme.

Ich habe das hier:

Bild1, 12, 2000, 103
Bild2, 12, 2205, 450
Bild3, 15, 5000, 17

Nun bekommt mein Programm die Koordinaten 12, 2205, 450 und muss aus 170.000 Files sofort auf das richtige Bild zugreifen. Eine Datenbank oder Listensuche kommt nicht in Frage.

Meine Idee war es die Korrdinaten als Array-Index-zahlen zu verwenden, in etwa so:

[12][2205][450] = Bild2

Doch Lücken kennen Array's nicht und verbruachen trotzdem den gesamten Speicherplatz.

Bei 3 Bildern, wäre also 12*2205*450 Speicherplatz verbraucht, obwohl nur 3 Stellen benutzt werden.


Ich habe es auch hiermit versucht:
ArrayList<ArrayList<ArrayList<ArrayList<String>>>> liste = new ArrayList <ArrayList<ArrayList<ArrayList<String>>>>();

Aber das brachte auch nichts, weil man auch hier bei 0 anfangen muss und nicht einfach nur Index:12 belegen kann.


Kennt dafür jemand eine Lösung?
 
Zuletzt bearbeitet:
hm, hört sich jetzt garnicht so kompliziert an. wenn ne liste oder ne datenbank nicht reicht (obwohl die datenbank auch verdammt schnell suchen kann 😉 ), warum nicht ne map mit den korrdinaten als key? dann hast du für jedes bild nur einen eintrag. oder hab ich nen denkfehler
 
warum nicht ne map mit den korrdinaten als key? dann hast du für jedes bild nur einen eintrag. oder hab ich nen denkfehler

Ja, keine Ahung 🙂

Wie würde das in einem Codemässig aussehen?


Allerdings habe ich das eben mal mit einer stinknormalen Array-Liste und einem Komplett-String ausprobiert (Koordinaten und Bildname in einer String-Line).

.
.
12 2230 1560 6234 548588525 548594759 Bild145001
12 2230 1561 5164 548594759 548599923 Bild147031
12 2230 1562 4146 548599923 548604069 Bild170211
.
.

Man mag es nicht glauben, aber in 45ms durchsuchte er die 170.000 Bilder (mit Stringvergleich "12 2230 1561") und spuckt mir das richtige Bild147031 anhand der Koordinaten aus. Würde mir erstmal reichen denke ich. Wenn es jedoch noch schneller ginge ... dann würd mir das auch gefallen 😉
 
Zuletzt bearbeitet:
also mit einer HashMap sollte es schon schneller gehen:

Java:
Map<String, String> map = new HashMap<String, String>();
map.put("12 2000 103", "Bild1");
map.put("12 2205 450", "Bild2");
map.put("15 5000 17", "Bild3");
//.....

String bild = map.get("12 2205 450");

Schöner wäre natürlich eine Map<Coordinates, String> aber das kannst du ja selber machen. Dort aber dann nicht vergessen die hashCode und equals zu überschreiben!
 
Hat alles nicht funktioniert. Als ich das auf Android übertragen habe, gab es Memory Probleme. Der 24MB HeapSpace ist das Problem.

Jetzt muss ich doch eine Datenbanktabelle mit SQLite bauen.
 
Kannst du mal näher beschreiben was die einzelnen Informationen bedeuten bzw. wie der maximale Zahlenbereich deiner Koordianten definiert sind?

12 -?
2230 -?
1560 -?

6234 -?
548588525 -?
548594759 -?

Bild145001 - Name deiner Bilddatei.
 

Neue Themen


Zurück
Oben