Schneller Zugriff auf Liste mit sortierten Flaechen..?

sirbender

Top Contributor
Hi,

ich habe eine Liste mit Rechtecken die nach ihrer Flaeche sortiert sind. Wenn ich jetzt z.B. ein Rechteck der Flaeche 20 will muesste ich eigentlich gar nicht ueber alle Elemente der Liste iterieren sondern nur ueber die letzte Haelfte weil alle Rechtecke davor groesser sind.

Gibt es Listen die die Sortierung irgendwie clever ausnutzen koennen und intern eine schnellere Suche verwenden als ueber alle Elemente zu iterieren?
 
G

Gast2

Gast
Dafür gibts Bäume/Maps (z.b. die TreeMap).

Java:
        Map<Double, Rectangle> map = new TreeMap<Double, Rectangle>();

        Rectangle r1 = new Rectangle(10, 10);
        Rectangle r2 = new Rectangle(10, 5);
        Rectangle r3 = new Rectangle(10, 3);

        map.put(r1.getWidth() * r1.getHeight(), r1);
        map.put(r2.getWidth() * r2.getHeight(), r2);
        map.put(r3.getWidth() * r3.getHeight(), r3);


        /** Rechteck mit der Fläche 50 rausholen */
        Rectangle area50 = map.get(Double.valueOf(50)); // gibt r2 zurück
 

Ruzmanz

Top Contributor
TreeMap bietet sich auf jeden Fall an, wenn du nur über die Fläche auf die einzelnen Rechtecke zugreifen willst. Denn die musst du schließlich wissen. Ansonsten wäre hier eine sotierte Liste besser, immerhin möchtest du doch folgenes machen?:

Code:
gibAlleGrößer10()
10
11
14
16
 

sirbender

Top Contributor
Ist dieser Ansatz sehr viel schneller als ueber die Liste zu iterieren? Kann bei der Map direkt das richtige Element angesprungen werden? Wie funktioniert das?

Kann ich mehrere Elemente der Groesse 50 in der Liste haben? Welches wird zurueckgeliefert?

Hmmm...kann ich mit diesem Ansatz auch z.B. eine Liste von Rechtecken erhalten die alle > 20 sind bzw. eine Liste von Rechtecken mit einer Flaeche zwischen > 10; < 25 ?
 
G

Gast2

Gast
Die genaue Implementierung der TreeMap habe ich mir nicht angeschaut, aber ich vermute dass die ähnlich wie nen binärer Baum arbeitet. Also ne Laufzeit von O(log n) hat (im vergleich die Liste: O(n)).

Bei sehr vielen Einträgen (ich schätze mal so ab ein paar hundert tausend einträgen) wirst du da dann schon nen performanceunterschied feststellen.

Hmmm...kann ich mit diesem Ansatz auch z.B. eine Liste von Rechtecken erhalten die alle > 20 sind bzw. eine Liste von Rechtecken mit einer Flaeche zwischen > 10; < 25 ?
Nein, diese Funktionalität bietet die TreeMap nicht an. Aber so ein binärer suchbaum mit ner bereichssuche lässt sich relativ leicht implementieren :)
 

madboy

Top Contributor
Dafür gibts Bäume/Maps (z.b. die TreeMap).

Java:
        Map<Double, Rectangle> map = new TreeMap<Double, Rectangle>();

        Rectangle r1 = new Rectangle(10, 10);
        Rectangle r2 = new Rectangle(10, 5);
        Rectangle r3 = new Rectangle(10, 3);

        map.put(r1.getWidth() * r1.getHeight(), r1);
        map.put(r2.getWidth() * r2.getHeight(), r2);
        map.put(r3.getWidth() * r3.getHeight(), r3);


        /** Rechteck mit der Fläche 50 rausholen */
        Rectangle area50 = map.get(Double.valueOf(50)); // gibt r2 zurück

Vorsicht, das kann (und wird) in die Hose gehen. Beispiel:
Java:
double d1 = 0.1*0.1;
double d2 = 0.01;
System.out.println(Double.valueOf(d1).equals(Double.valueOf(d2))); //false
 

Ruzmanz

Top Contributor
Die Map arbeitet mit Keys, somit würden sich Duplikate doch überschreiben? Zudem glaube ich nicht, dass der Tree wesentlich schneller ist. Bei einer Filterrung wäre die sotierte Liste vorteilhafter (zumindest bei einen großen Wertebereich). Sicher bin ich mir aber nicht, das muss man selbst überprüfen :)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
E schneller von der Datenbank abfragen Java Basics - Anfänger-Themen 15
C Ein Algorithmus soll schneller werden Java Basics - Anfänger-Themen 24
Hallolu Pong-Spiel: Schläger schneller werden lassen Java Basics - Anfänger-Themen 9
S Was ist schneller: direkte Sortierung oder indirekt ueber eine SortedMap..? Java Basics - Anfänger-Themen 10
M Schneller Timer Java Basics - Anfänger-Themen 2
P Schneller Quadratzahltest für beliebig große natürliche Zahlen Java Basics - Anfänger-Themen 2
H Collections Was ist schneller - HashMap + Sort v TreeMap? Java Basics - Anfänger-Themen 75
H Operatoren Was ist schneller: <, <=, ==, >, >=? Java Basics - Anfänger-Themen 46
P schneller Sort ? Java Basics - Anfänger-Themen 2
V Double schneller als Float? Java Basics - Anfänger-Themen 13
R ArrayList sehr viel schneller als Array? Java Basics - Anfänger-Themen 2
Dit_ Was ist schneller | < oder >= Java Basics - Anfänger-Themen 6
M Java URLConnection schneller bekommen Java Basics - Anfänger-Themen 3
M schneller Klassenvergleich Java Basics - Anfänger-Themen 2
A Datein kopieren: File oder xcopy? Was ist schneller? Java Basics - Anfänger-Themen 10
R java-programme schneller laufen lassen Java Basics - Anfänger-Themen 41
M Mehrere Threads nutzen --> run() schneller als start(), Warum? Java Basics - Anfänger-Themen 3
ruerob Warum ist Timer schneller als While? Java Basics - Anfänger-Themen 9
J Wie java programm noch schneller machen? Java Basics - Anfänger-Themen 30
S LinkedList indexOf() - geht des irgendwie schneller? Java Basics - Anfänger-Themen 23
O String-Prüfung: Was ist besser/schneller? Java Basics - Anfänger-Themen 15
G Arraysuche schneller ausführen? Java Basics - Anfänger-Themen 14
H Serialization: Was ist besser(schneller) Binary <-> XM Java Basics - Anfänger-Themen 2
N Schneller als FileWriter? Java Basics - Anfänger-Themen 28
G Bessere Lösung für SQL STMNT ? (Schneller?) Java Basics - Anfänger-Themen 4
C was is schneller Vector oder double Array Java Basics - Anfänger-Themen 5
G java optimieren. wie daten schneller in mysqlDB schreiben? Java Basics - Anfänger-Themen 15
I In unterschiedlichen Applikation Zugriff auf eine gemeinsame Anwendung? Java Basics - Anfänger-Themen 8
C Zugriff auf Methode Java Basics - Anfänger-Themen 2
I Applikationsserver (WildFly) - Zugriff auf Ressourcen.. Problem mit Pfade Java Basics - Anfänger-Themen 10
J Zugriff auf eine 2. Klasse die per UI-Designer erstellt wurde Java Basics - Anfänger-Themen 1
Encera Zugriff auf Map-Objekte Java Basics - Anfänger-Themen 3
T Zugriff auf Control anderer Klasse Java Basics - Anfänger-Themen 5
W Unterschiede bei Zugriff auf Objekt und Klassenvariablen über einen Getter? Java Basics - Anfänger-Themen 2
EchtKeineAhnungManchmal hallo habe ein Problem mit einer Datei -> (Zugriff verweigert) Java Basics - Anfänger-Themen 4
R TreeSet Zugriff aus anderer Klasse Java Basics - Anfänger-Themen 8
C Kein Zugriff auf Klassenmethoden in Main Methode Java Basics - Anfänger-Themen 23
H Zugriff verweigert Java Basics - Anfänger-Themen 5
moiss002 Umgebungsvariable Kein Zugriff auf ein Array Java Basics - Anfänger-Themen 7
B Probleme mit Zugriff auf Dateisystem Windows 10 ( jFileChooser) Java Basics - Anfänger-Themen 17
B Zugriffsmodifier, Zugriff außerhalb Package Java Basics - Anfänger-Themen 5
C Zugriff auf Attribut von Oberklasse Java Basics - Anfänger-Themen 8
P Klasse hat keinen Zugriff auf getter/setter-Methoden eines Objektes Java Basics - Anfänger-Themen 9
B Methoden Methoden haben kein Zugriff auf variablen Java Basics - Anfänger-Themen 4
M Gettter/Setter Methoden Klassenfelder kapselung und zugriff? Java Basics - Anfänger-Themen 1
S Zugriff auf protected Fields = guter Programmierstil? Java Basics - Anfänger-Themen 11
M Pfadprobleme - Zugriff auf einen Ordner im Workspace Java Basics - Anfänger-Themen 17
ruutaiokwu Bluetooth-Zugriff, braucht es dazu plattformabhängige Libraries oder kann das Java mittlerweile selbst? Java Basics - Anfänger-Themen 10
R Zugriff auf den Index eines Arrays, welches ein Objekt ist. Java Basics - Anfänger-Themen 4
M Zugriff auf eine ArrayList in einer anderen Klasse Java Basics - Anfänger-Themen 4
P Zugriff auf Variablen anderer Klassen in Greenfoot Java Basics - Anfänger-Themen 1
L Methoden Zugriff <identifier> expected Java Basics - Anfänger-Themen 13
T Java - Zugriff nur mit CLASSPATH ? Java Basics - Anfänger-Themen 7
B Klassen Zugriff auf ein Objekt einer Klasse aus einer Methode heraus Java Basics - Anfänger-Themen 4
L Zugriff auf Attribute eins Objekts über ActionListener Java Basics - Anfänger-Themen 4
D Zugriff auf Methode einer anderen Klasse Java Basics - Anfänger-Themen 5
S Zugriff auf Objekt Java Basics - Anfänger-Themen 5
A Klassen Zugriff auf Instanzen Java Basics - Anfänger-Themen 2
N ArrayList in eigener Klasse erzeugen mit Zugriff Java Basics - Anfänger-Themen 7
J Zugriff auf Variable in anderem Programm Java Basics - Anfänger-Themen 5
Q Zugriff auf Attribute Java Basics - Anfänger-Themen 3
J Klassen Zugriff auf ein "String Array" Java Basics - Anfänger-Themen 6
H Datentypen ArrayList in ArrayList: Zugriff Java Basics - Anfänger-Themen 6
J get methoden zugriff und objekt erzeugung Java Basics - Anfänger-Themen 30
J Datenbank Zugriff Java Basics - Anfänger-Themen 24
T Zugriff auf JCheckBox Java Basics - Anfänger-Themen 8
E Netzlaufwerk Zugriff schlägt fehl Java Basics - Anfänger-Themen 11
C Group, Actor und Instanz-Zugriff, LibGDX Java Basics - Anfänger-Themen 4
S Zugriff auf Attribut einer unbekannten Klasse erhalten Java Basics - Anfänger-Themen 6
R Methoden Methode der GUI-Klasse Zugriff auf Methoden der Hauptklasse Java Basics - Anfänger-Themen 9
S Vererbung Zugriff auf die Basisklasse einer "zweiten" Erweiterungsklasse Java Basics - Anfänger-Themen 2
Z Threads Threads - Zugriff auf Ressourcen ohne(Lock, Synchronized) Java Basics - Anfänger-Themen 2
S Vererbung Zugriff auf Methode funktioniert nicht (static/non-static) Java Basics - Anfänger-Themen 3
F Klassen Zugriff auf verschachtelte Objekte Java Basics - Anfänger-Themen 11
J Sichtbarkeit und Zugriff Java Basics - Anfänger-Themen 9
G Wieviel kostet der Zugriff auf Objektattribute im Vergleich zur Erstellung von vars in Methode? Java Basics - Anfänger-Themen 11
L Zugriff auf zwei Java-Quellcodes Java Basics - Anfänger-Themen 3
A OOP Zugriff auf Objekte von außen Java Basics - Anfänger-Themen 8
M Kapselung Datenkapselung Sinn direkter Zugriff? Java Basics - Anfänger-Themen 1
G Methoden Zugriff auf Methode.. aus einer anderen Klasse Java Basics - Anfänger-Themen 6
J JDialog Zugriff auf parent JDialog Java Basics - Anfänger-Themen 5
K Collections Zugriff auf ein bestimmtes Element in der Collection Java Basics - Anfänger-Themen 1
K ArrayList in Konstruktor - wie späterer Zugriff Java Basics - Anfänger-Themen 2
F Zugriff auf Objekt einer anderen Klasse Java Basics - Anfänger-Themen 7
P Zugriff auf Felder in ArrayList Objekten Java Basics - Anfänger-Themen 2
J Erste Schritte Zugriff auf Eigenschaft Java Basics - Anfänger-Themen 2
M MVC - Problem mit Zugriff auf Objekt Java Basics - Anfänger-Themen 4
D Zugriff auf von einer anderen Klasse erstellten Objekten Java Basics - Anfänger-Themen 5
C 5 - Zugriff verweigert Java Basics - Anfänger-Themen 1
K Zugriff auf Variabeln Wert einer Instanz Java Basics - Anfänger-Themen 4
A Methoden Zugriff auf eingelesene Variablen in der main Methode (ohne Änderung der Parameterliste) Java Basics - Anfänger-Themen 4
Z Methoden Zugriff mit Klasse 3 auf Methode von Klasse 2 welche in Klasse 1 erzeugt wird Java Basics - Anfänger-Themen 6
Z Zugriff auf andere Methoden Java Basics - Anfänger-Themen 12
Z Zugriff auf Pakete Java Basics - Anfänger-Themen 5
G Zugriff zwischen Klassen Java Basics - Anfänger-Themen 15
N Problem mit Swing Textfeld und Zugriff aus anderer Klasse Java Basics - Anfänger-Themen 6
H Kein Zugriff auf das Element einer JList möglich: Fehlermeldung Java Basics - Anfänger-Themen 2
W OOP Zugriff auf mit Objekt erstellte Struktur Java Basics - Anfänger-Themen 7
F Klassen Zugriff auf Fenster aus versch. Klassen Java Basics - Anfänger-Themen 5
M Variablen Zugriff von außerhalb eines Blockes auf eine Variable innerhalb eines Blockes Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben