Schnellste Collection/Liste

Status
Nicht offen für weitere Antworten.

mephi

Bekanntes Mitglied
Ich sitze momentan an einem "Wecker" für die FH. Der Großteil war vorgegeben.. mehr oder weniger gut.
Bei jedem "tick" den der Wecker macht wird eine Liste mit Alarmen usw durchgegangen. Aus persönlichem Interesse und Ehrgeiz will ich das Ding nun so leistungsfähig wie möglich machen.

Daher meine Frage, was ist die schnellste Liste/Collection?
Bisher nutze ich eine HashMap und eine HashSet die mit Iteratoren durchlaufen werden. Gibts noch schnellere Lösungen?
Ein Vektor + forschleife? Oder eine ArrayList?
 

Wildcard

Top Contributor
Das ist abhängig von den Operationen die durchgeführt werden.
Sonst bräuchte man die anderen ja nicht...
 

mephi

Bekanntes Mitglied
hm. ich laufe mit einem iterator über die elemente der hashset, caste jedes objekt und alle weiteren aktionen sind ja gleich egal bei welcher liste..
wo liegen denn die vorteile der einzelnen listen? steht das irgendwo?
 

Wildcard

Top Contributor
-LinkedList ist sehr langsam bei wahlfreiem Zugriff, brauchen dafür aber wenig Speicher und sind schnell beim Einfügen, Entfernen und Iterieren.

-Vector: Legacy Klasse, vergiss sie

-ArrayList sehr schneller wahlfreier Zugriff, schnelle Iteration, Entfernen und Hinzufügen von Elementen unter Umständen sehr teuer, Speicher Overhead

-HashSet schnellster wahlfreier Zugriff für gut implementierten Hash, bricht bei falsch implementieren Hash ein. Iteration wird etwas langsamer sein als bei den anderen.

Einfach mal API lesen :wink:
 

mephi

Bekanntes Mitglied
vielen dank :) aber hätte da eine weitere frage. was ist ein gut implementierter hash? bzw was ist ein schlechter?
hab mir nie drüber gedanken gemacht was hash überhaupt heißt.. n übersetzer sagt mir dazu"hackfleisch" soll das also sowas wie eine ungeordnete menge sein?
 

Wildcard

Top Contributor
Ein Hash ist ein Wert der einen großen Wertebereich auf einen kleineren Abbildet.
Das es dabei zu Kollisionen (zwei verschiedene Objekte mit gleichem Hash) kommen kann ergibt schon die Logik.
Ein guter Hash zeichnet sich durch wenige Kollisionen aus, ein schlechter durch das Gegenteil.
 

mephi

Bekanntes Mitglied
achso, meinen die da die native implementierung?
hmm.. da muss ich doch mal suchen was in java sache ist

danke ;)
 

Wildcard

Top Contributor
Nein, du wirst einfach nicht umhinkommen irgendwann selbst mal hashCode() zu überschreiben (nämlich immer dann wenn du equals überschreibst).
Und wenn du das tust ist's einfach Grottendämlich zB '0' zurückzugeben :wink:
 

mephi

Bekanntes Mitglied
achso. und du meinst die möglichst kollisionsfreie methode um einen eigenen hashcode zu generieren. damit hab ich noch nichts gemacht.
für das aktuelle projekt hab ich einfach eine ID die eindeutig sein muss. aber zum spass könnte ich ja mal hashCode() und equals() überschreiben und darin die ID benutzen
 

Tellerrand

Bekanntes Mitglied
mephi hat gesagt.:
Ich sitze momentan an einem "Wecker" für die FH. Der Großteil war vorgegeben.. mehr oder weniger gut.
Bei jedem "tick" den der Wecker macht wird eine Liste mit Alarmen usw durchgegangen. Aus persönlichem Interesse und Ehrgeiz will ich das Ding nun so leistungsfähig wie möglich machen.
[...]
Bisher nutze ich eine HashMap und eine HashSet die mit Iteratoren durchlaufen werden. Gibts noch schnellere Lösungen?
Ein Vektor + forschleife? Oder eine ArrayList?
Die schnellste Lösung dürfte eine priorisierte Warteschlange, in der die Alarme nach Zeit sortiert sind, sein. Dadurch musst du immer nur das erste Objekt prüfen und nicht über die komplette Liste iterieren.
http://java.sun.com/j2se/1.5.0/docs/api/java/util/PriorityQueue.html wäre meine Wahl.
 

mephi

Bekanntes Mitglied
EDIT: das ganze lässt sich leider nicht nutzen, da das interface für alarme nur 2 methoden mit boolschem rückgabte wert vorsieht was die "klingelzeit" angeht .. isAlarmTimeNow() und hasToBeRemoved()

außer ich lass danach sortiern. hmmm dann muss ich nur vorher mit peek schauen wann ein alarm kommt der nicht entfernt werden soll..
 

mephi

Bekanntes Mitglied
arg nein geht imo auch nicht.. kann euch ja mal meine aktuelle run methode zeigen..
Code:
	public void run() {
		long before = 0;
		long after = 0;
		while(true) {
			before = System.currentTimeMillis();
			makeATick();
			after = System.currentTimeMillis();
			try {
				Thread.sleep(updateTime-(after-before));
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			
		}
		
	}
und makeATick
Code:
	protected synchronized void makeATick() {
		updateTimeListeners(new TimeEventImpl(this));
		


		Iterator iterator = (Iterator) alarms.keySet().iterator();
		Alarm tmpAlarm = null;
		while (iterator.hasNext()){
			tmpAlarm = (Alarm) alarms.get(iterator.next());

			if(tmpAlarm.isAlarmTimeNow(new Date().getTime())){
				updateAlarmListeners(new AlarmEventImpl(this, tmpAlarm.getId()));
			}
			if(tmpAlarm.hasToBeRemoved()) delAlarms.add(tmpAlarm);
		}
		if( !delAlarms.isEmpty()) {
			iterator = delAlarms.iterator();
			while (iterator.hasNext()) {
				removeAlarm((Alarm)iterator.next());
			}
			delAlarms.clear();
		}
	}

vielleicht habt ihr noch eine idee, das schneller zu machen
alarms ist eine HashMap und delAlarms ein HashSet
 

Tellerrand

Bekanntes Mitglied
Ja wenn Alarm keine Methode der Zeit bietet, sowie nicht das Interface Compareable implementiert und du die Klasse nicht änderst dann fällt eine Queue weg ;)

Bleibt also die Frage was mehr Ressourcen frisst von deinen Operationen.
Schwierige Frage, aus dem Gefühl heraus würde ich sagen eine LinkedList.
 

mephi

Bekanntes Mitglied
ok ich glaub ich kann da nicht mehr viel optimieren.
ich denke die meiste Zeit geht bei dem Thread.sleep() drauf, kann das sein? für meine makeATick methode bekomm ich zeiten von max. 16ms und bei extremen tests mit über 1mio listenern ca 150ms.
 

DEvent

Bekanntes Mitglied
mephi hat gesagt.:
ok ich glaub ich kann da nicht mehr viel optimieren.
ich denke die meiste Zeit geht bei dem Thread.sleep() drauf, kann das sein? für meine makeATick methode bekomm ich zeiten von max. 16ms und bei extremen tests mit über 1mio listenern ca 150ms.
Naja Thread.sleep() lässt ja den Thread solange schlafen, wie du willst. Also ein eindeutiges ja, updateTime ist sicher 1000ms?
 

mephi

Bekanntes Mitglied
ja sicher.
ein thread bekommt ja nicht genau nach der sleeptime also hier 1000ms die kontrolle zurück.. um wieviel ms kann sich das verzögern?
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
C Die schnellste Collection-Klasse ? Allgemeine Java-Themen 37
N Schnellste Methode, ein Array durchzugehen? Allgemeine Java-Themen 9
T Schnellste Möglichkeit Datenverarbeitung Allgemeine Java-Themen 5
N Schnellste Art Strings in eine Datei zu schreiben Allgemeine Java-Themen 7
N Schnellste Art Dateien zu kopieren Allgemeine Java-Themen 16
Rakshan Generic reading of XML document from the root tag into an Collection Allgemeine Java-Themen 0
JavaJüngling beliebige Collection die Comperable Elemente enthält als Parameter Allgemeine Java-Themen 37
W Collections Suche Collection, um Strings mit Indizees versehen Allgemeine Java-Themen 47
I Collection - contains-Methode überschreiben (anonyme innere Klasse) Allgemeine Java-Themen 4
Y String-Collection: längste gemeinsame Strings / Prefixe Allgemeine Java-Themen 3
S Probleme mit Collection Allgemeine Java-Themen 7
S Passende Java Collection Allgemeine Java-Themen 5
D Eigene/r Collection/Container Allgemeine Java-Themen 3
K Collections Collection<> mit List<String> abgleichen? Allgemeine Java-Themen 10
D Beste Collection für Integer Allgemeine Java-Themen 4
H JPA (EclipseLink) Neuer Eintrag in Collection speichern (unidirektional) Allgemeine Java-Themen 3
M Collections Typ Variable einer generischen Collection ? Allgemeine Java-Themen 4
T Garbage Collection Frage Allgemeine Java-Themen 15
H Datentypen Collection für SQL-Datentypen Allgemeine Java-Themen 2
M collection persistence system Allgemeine Java-Themen 4
K associate collection with two open sessions Allgemeine Java-Themen 12
B Garbage Collection Logfile: Binary File Allgemeine Java-Themen 2
T Liste mit GregorianCalendar-Objekten in List einlesen, mit Collection sortieren und ausgeben Allgemeine Java-Themen 3
S Stilfrage bezüglich Beans mit Collection-Properties Allgemeine Java-Themen 2
B iText Portable Collection Acrobat X Allgemeine Java-Themen 2
S Eine Collection von Objekten mit LDAP Syntax filtern Allgemeine Java-Themen 5
Rudolf Aus Collection<Integer> eine Zahl machen Allgemeine Java-Themen 2
R Dateigestützte Collection für große Datenmengen Allgemeine Java-Themen 5
hdi Garbage Collection Allgemeine Java-Themen 12
P Collection Tree Allgemeine Java-Themen 19
K Collection.contains()/retainAll() mit Referenzgleichheit statt equals()? Allgemeine Java-Themen 2
W return Collection mit schleife durchsuchen Allgemeine Java-Themen 10
E Collection Problem Allgemeine Java-Themen 2
B Geordnete, begrenzte Collection Allgemeine Java-Themen 3
D [SOLVED] Collection wird nicht richtig per Konstruktor übernommen Allgemeine Java-Themen 8
S Wahl der Collection, unspezifizierte Elementtypen Allgemeine Java-Themen 4
D Map mit Collection Eigenschaften Allgemeine Java-Themen 9
T Objekt der Garbage Collection zugaenglich machen? Allgemeine Java-Themen 7
S Innerer Type einer generischen Collection herausfinden? Allgemeine Java-Themen 13
B SBCC - Swing Better Components Collection - downloadlink ? Allgemeine Java-Themen 5
G Schnelligkeit einer Collection Allgemeine Java-Themen 12
V Collection in Collection Allgemeine Java-Themen 3
W [solved] Vector sortieren (Collection / Comparable?) Allgemeine Java-Themen 7
M Collection aufteilen Allgemeine Java-Themen 4
S Collection Type Allgemeine Java-Themen 8
S Probleme mit collection.containsAll Allgemeine Java-Themen 28
F Frage zu Memory Leak, Garbage Collection und Profiler-Tools Allgemeine Java-Themen 6
C Collection Multithreading? Allgemeine Java-Themen 33
vogella Überschreiben von equals und hashcode für Collection Allgemeine Java-Themen 7
T Hibernate Criteria Queries - Abfragen von Collection-Members Allgemeine Java-Themen 2
M Collection mit ArrayList Allgemeine Java-Themen 17
F mittels Collection<A> an A.class kommen? Allgemeine Java-Themen 7
L Welche Collection ist die richtige ? Listen mergen Allgemeine Java-Themen 3
B Collection Allgemeine Java-Themen 2
M Wie lange dauert ein garbage collection Allgemeine Java-Themen 7
R Garbage Collection bei gegenseitiger Objektreferenz Allgemeine Java-Themen 2
N Collection#retainAll(Collection<?> c) Allgemeine Java-Themen 3
M garbage collection Allgemeine Java-Themen 14
G Frage zur Garbage Collection Allgemeine Java-Themen 5
R Objekttyp ermitteln das aus generischer Collection kommt Allgemeine Java-Themen 3
J Von Collection zu vector Allgemeine Java-Themen 5
P Welche Collection verwenden? Allgemeine Java-Themen 4
S Sortierung einer Collection nach dem Attribut "name&quo Allgemeine Java-Themen 3
C Collection Element ersetzen Allgemeine Java-Themen 5
C public boolean containsAll(Collection c) Allgemeine Java-Themen 2
C Collection, LinkedList, Elemente Allgemeine Java-Themen 4
Fynn29 Liste sortieren ohne Array und ohne vorgegebene Sortierung Allgemeine Java-Themen 24
MiMa Filtern von TableView Liste Allgemeine Java-Themen 2
B Liste aller Kombintionen mit Einschränkungen Allgemeine Java-Themen 8
TheSepp Wie kann man Leerzeichen aus einer Array liste entfernen? Allgemeine Java-Themen 10
B Liste ändern während Iteration über Diese? Allgemeine Java-Themen 16
D Erste Schritte Liste erweitern Allgemeine Java-Themen 11
sserio Variablen Liste erstellt und ein Problem mit dem Index Allgemeine Java-Themen 6
L allgemein Strings händisch in Liste sortieren Allgemeine Java-Themen 47
M einfach verkettete Liste verstehen Allgemeine Java-Themen 23
Drachenbauer wie kann ich alle instanzen einer Klasse durchsehen, ohne, dass diese in einer Liste erzeugt wurden? Allgemeine Java-Themen 11
Gaudimagspam Skip Liste erstellen in Java Allgemeine Java-Themen 3
G Java Editor Löschen doppelter Zahlen einer Liste Allgemeine Java-Themen 2
bueseb84 Spring Boot Entity mit Liste Allgemeine Java-Themen 4
MiMa Werte in liste speichern? Allgemeine Java-Themen 3
Curtis_MC Collections Liste anhand mehrere Kriterien sortieren Allgemeine Java-Themen 6
K verkettete Liste Allgemeine Java-Themen 3
G Liste (UsageStats) sortieren (Android) Allgemeine Java-Themen 5
T Google Links in einer Liste Allgemeine Java-Themen 4
looparda Liste filtern nach Prädikaten verschiedener Typen Allgemeine Java-Themen 3
OSchriever Einfach verkettete Liste ändern Allgemeine Java-Themen 43
L Liste überschreibt alte Elemte Allgemeine Java-Themen 10
H Länge einer verketteten Liste Allgemeine Java-Themen 4
E Erstellen einer Liste mit einer maximalen Menge an Elementen Allgemeine Java-Themen 13
P Element einer Liste wurde hinzugefügt, aber es gibt keinen Zugriff Allgemeine Java-Themen 2
S Methoden Liste soll Methode aus innerer Klasse aufrufen Allgemeine Java-Themen 4
L Erste Schritte Liste von Datums filter nach Monate Allgemeine Java-Themen 4
Y Liste in Stream Packen Allgemeine Java-Themen 1
K Einfache Verkettete Liste mit Node Allgemeine Java-Themen 3
perlenfischer1984 Reflection : Element in generische Liste hinzufügen Allgemeine Java-Themen 4
perlenfischer1984 Liste mit generics zurück liefern Allgemeine Java-Themen 8
S Verkettete (Teil)Liste sortieren ( rekursiv bis n) Allgemeine Java-Themen 2
G Liste zwischen zwei Kalenderdaten erstellen Allgemeine Java-Themen 3
B Wie vergleiche ich Strings in einer Liste? Allgemeine Java-Themen 5
Viktim Threads Liste In unterschiedlichen Threads bearbeiten Allgemeine Java-Themen 23

Ähnliche Java Themen

Neue Themen


Oben