Datentypen Große, sortierte, schnelle Datenstruktur

Povlsen84

Mitglied
Hallo,

ich suche eine Datenstruktur, die viele (100k) Objekte aufnehmen kann, sortiert ist und möglichst effektiv einfügen und löschen kann.

Die bisher getesteten (TreeSet, Vector, ...) scheitern bei diesen Anforderungen an der Laufzeit oder dem Speicher :)

lG,
Stephan
 

moormaster

Top Contributor
Erstens: Vector sortiert nicht.
Zweitens: Was stört dich an der Laufzeit?

TreeSet (Java Platform SE 6)

Die Einfügeoperation hat eine Komplexität von O(log n) Schritten... genauso das auffinden oder löschen eines Elementes aus dem TreeSet...

Wenn du Probleme mit dem Speicherplatz hast, solltest du vielleicht mal die HeapSize der VM vergrößern?
 

Schumi

Bekanntes Mitglied
Der Speicherverbrauch hängt wohl weniger von der haltenden Datenstruktur als mehr von der zu haltenden Datenstruktur selber ab.
 

ThreadPool

Bekanntes Mitglied
Erstens: Vector sortiert nicht.
Zweitens: Was stört dich an der Laufzeit?

TreeSet (Java Platform SE 6)

Die Einfügeoperation hat eine Komplexität von O(log n) Schritten... genauso das auffinden oder löschen eines Elementes aus dem TreeSet...

Die Komplexität mag asymptotisch so aussehen nur wenn ich mich recht entsinne sagt das jetzt nichts über die Kosten der Schritte selbst aus, da wird IMHO nur unterstellt das die endlich und in konstanter Zeit abzulaufen haben. Das TreeSet ansich bringt etwas Overhead mit da es ein "Wrapper" für eine TreeMap ist. Die TreeMap ist wiederum durch einen Rot-Schwarz-Baum implementiert, also einen höhenbalancierten Baum. Das Ausbalancieren selbst kostet ja auch nicht Nichts, fällt natürlich mit unter den Worstcase O(log n) aber ein gewisser Faktor ist es IMHO. [1]

Vor ein paar Jahren hatten wir auch mal was mit TreeSet versucht, schneller waren wir im Endeffekt durch eine einfache ArrayList mit einfacher binärer Suche [2] zum Einfügen und sortiert Halten.

[1] Komplexitätstheorie war noch nie meine Stärke, groben Unfug bitte korrigieren. ;)
[2] verwendet wurde eine Eigene nicht die aus der Arrays-Klasse
 

faetzminator

Gesperrter Benutzer
Also hat er auch die gleiche Laufzeit :) Ausser, dass in der Standard API nicht zwingend Binary Search verwendet wird (z.B. bei kleinen Datenmengen) - da ist mein Stand allerdings nicht allzu aktuell.
 

ThreadPool

Bekanntes Mitglied
Also hat er auch die gleiche Laufzeit :) Ausser, dass in der Standard API nicht zwingend Binary Search verwendet wird (z.B. bei kleinen Datenmengen) - da ist mein Stand allerdings nicht allzu aktuell.

Wenn der Compiler garantieren kann das die compare-Funktion des Comparators geinlined wird dann hast du recht. Andernfalls habe ich immernoch weniger Overhead, da ich diese Funktion nicht aufrufe und glücklicherweise durch etwas Trickserei die Sortierschlüssel auf Longs abbilden konnte. Was dann in einem stumpfen Ganzahlvergleich endet. Aber das is hier Off-Topic.
 

fastjack

Top Contributor
Also ich habe bei größeren Datenimporten sehr gute Erfahrungen mit TreeMap und Vector/ArrayList gemacht. Größere bedeutet mehrere Millionen Datenzeilen, die als Objekte verpackt in einer der obigen solchen Strukturen lagen.
Bei der Bearbeitung habe ich meistens darauf geachtet, wenn möglich, das fertig behandelte Element aus der Liste zu entfernen. Meistens war das eine Kombi von get(0)/remove(0) n-Mal. Gepaart mit einer Empfehlung an die VM eine GC zu machen, beispielsweise nach tausend Objekten. Das lief bisher immer gut.
Hauptspeicherprobleme traten bei großen Mengen natürlich auch auf, doch die Schalter Xmx und Xmx sollten helfen (Windowsmaschinen verkraften hier so um 1GB, server-Option der VM setzen). Bei einem früheren besonders heftigen Einmalimport reichte dieses GB auch nicht mehr aus. Da ich als Arbeitsrechner FreeBSD hatte, mit nem Diablo-Java (hat keine Speicherbeschränkung bei Xmx, Xms) und genügend RAM, konnte ich den Speicher auf knapp 2,4GB anheben --> Import kein Problem ;)
Suchoperationen in Listen sind bei deratigen Mengen natürlich anstrengend, aber es ja Maps ;)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
S Arbeitsfeld in gleich große Bereiche einteilen Java Basics - Anfänger-Themen 2
G Best Practice Wie große "Tabellen" effizient durchsuchen und Daten händeln? Java Basics - Anfänger-Themen 15
C Große Zahlen vergleichen Java Basics - Anfänger-Themen 19
S 4 große Textdateien zu einer Mergen Java Basics - Anfänger-Themen 5
K Große Datenliste Java Basics - Anfänger-Themen 2
E Große Datenmengen effizient in CSV File speichern Java Basics - Anfänger-Themen 4
1 Extrem große Variable Java Basics - Anfänger-Themen 1
S Best Practice MVC und große Datenmengen aus einer mySQL - Datenbank Java Basics - Anfänger-Themen 24
M Mergesort Aufgabe große Probleme Java Basics - Anfänger-Themen 9
P Schneller Quadratzahltest für beliebig große natürliche Zahlen Java Basics - Anfänger-Themen 2
T Scanner für große Textdatei Java Basics - Anfänger-Themen 11
N Input/Output Große Dateien schnell Speichern/auslesen Java Basics - Anfänger-Themen 16
B große jpeg verarbeiten Java Basics - Anfänger-Themen 8
K Große Gleitkommazahlen runden Java Basics - Anfänger-Themen 8
X Compiler-Fehler javac - 08 eine zu große int? Java Basics - Anfänger-Themen 11
turmaline String teilen in gleich große strings Java Basics - Anfänger-Themen 15
F Große Potenzen berechnen Java Basics - Anfänger-Themen 6
J Große .txt einlesen - Idee? Java Basics - Anfänger-Themen 16
E Datentypen Große Zahl erzeugen Java Basics - Anfänger-Themen 5
P Kleines Projekt -> Große Überlegungen Java Basics - Anfänger-Themen 2
F Große Daten und große Array Java Basics - Anfänger-Themen 21
O Performant große Dateien durchsuchen Java Basics - Anfänger-Themen 8
J Große animierte Gif preloaden und solange mit einer nicht animierten ersetzen Java Basics - Anfänger-Themen 5
H Große Projekte mit Java - Ausführbare Datei Java Basics - Anfänger-Themen 2
K Eclipse EMF und das große HÄ? Java Basics - Anfänger-Themen 5
T .split(";") nicht gleich große arrays werden erzeu Java Basics - Anfänger-Themen 2
G String aus Zahlen multiplizieren -> unendlich große ! Java Basics - Anfänger-Themen 13
M Spielt der Debugger bei java eine große Rolle Java Basics - Anfänger-Themen 3
C große Matrizen, Performance, (Pointer?) Java Basics - Anfänger-Themen 6
L JTextArea große setzen Java Basics - Anfänger-Themen 5
S große probleme mit java Java Basics - Anfänger-Themen 6
R große Datenmenge in Datei schreiben Java Basics - Anfänger-Themen 8
M FileOutputStream und zu große Zahlen! Java Basics - Anfänger-Themen 10
J Große *.Text Datei zum verschicken in viele kleine Java Basics - Anfänger-Themen 7
B Probleme große Strings zu schreiben Java Basics - Anfänger-Themen 2
A große errechnete datenmengen sofort in datei schreiben? Java Basics - Anfänger-Themen 6
S Große Text dateien einbinden Java Basics - Anfänger-Themen 3
R große Zahlen Java Basics - Anfänger-Themen 4
R Große Zahlen Java Basics - Anfänger-Themen 3
T Große Zahlen aufgesplittet in verketteter Liste speichern Java Basics - Anfänger-Themen 4
N Große Probleme mit StingBuffer und Array Java Basics - Anfänger-Themen 2
L Zwei sortierte Subarrays mit gleicher Länge zusammenfügen Java Basics - Anfänger-Themen 2
B sortierte Liste Java Basics - Anfänger-Themen 4
E sortierte Arrayteile zusammenfügen Java Basics - Anfänger-Themen 0
A Sortierte Listen Java Basics - Anfänger-Themen 4
J Sortierte generische Liste Java Basics - Anfänger-Themen 1
K 2 sortierte Arrays zu einem Arrays zusammenführen Java Basics - Anfänger-Themen 13
B Sortierte Liste implementieren Java Basics - Anfänger-Themen 3
M sortierte Ausgabe eines .txt Dokuments Java Basics - Anfänger-Themen 1
H 2 sortierte arrays in ein array Java Basics - Anfänger-Themen 2
M Sortierte Tabelle in Datei schreiben Java Basics - Anfänger-Themen 5
P Sortierte Liste Java Basics - Anfänger-Themen 29
L Problem mit Iterator bzw. Sortierte Liste Java Basics - Anfänger-Themen 14
S Sortierte LinkedList nach Variablen durchsuchen und nicht nach INDEX Java Basics - Anfänger-Themen 6
G Zwei sortierte Arrays zusammenführen Java Basics - Anfänger-Themen 13
G Sortierte Daten Java Basics - Anfänger-Themen 7
M Sortierte Liste / Map Java Basics - Anfänger-Themen 8
M Sortierte Liste nach Wert durchsuchen Java Basics - Anfänger-Themen 8
T Sortierte Ausgabe in der Shell Java Basics - Anfänger-Themen 4
X Sehr schnelle agile Entwicklung Java Basics - Anfänger-Themen 1
S Schnelle Hilfe bei 2 kurzen Aufgaben benötigt Java Basics - Anfänger-Themen 2
A Schnelle, dynamische, geordnete Datenstruktur? Java Basics - Anfänger-Themen 11
J Leichte Java Anfängerfrage. Bitte schnelle Antwort. :) Java Basics - Anfänger-Themen 10
H BITTE SCHNELLE HILFE - VERZEICHNISSE DURCHGEHEN Java Basics - Anfänger-Themen 2
M Schnelle Tastaturabfrage Java Basics - Anfänger-Themen 24
S Was ist API? Brauche schnelle Hilfe!!! Java Basics - Anfänger-Themen 1

Ähnliche Java Themen

Neue Themen


Oben