Forum: PC-Programmierung Perfomancevergleich Klassen - Arrays


von P. Dee (Gast)


Lesenswert?


von Sven B. (scummos)


Lesenswert?

Kann kein Java aber typischerweise ist das mit den 4 Arrays besser, weil 
die Daten die du durchsuchst dann alle nebeneinander im Speicher liegen.

von Jim M. (turboj)


Lesenswert?

Anfänger, beide. Für dieses Problem gibt es HashMap.

von Sven B. (scummos)


Lesenswert?

Jim M. schrieb:
> Anfänger, beide. Für dieses Problem gibt es HashMap.

Das war aber nicht die Frage ...

von Εrnst B. (ernst)


Lesenswert?

Sven B. schrieb:
> Das war aber nicht die Frage

Es ist aber die Antwort.

Warum sollte man über die Geschwindigkeitsunterschiede zwischen Krücken 
und Rollstühlen diskutieren, wenn ein kostenloser Tesla fahrbereit vor 
der Türe steht?

(Ok, Vergleich hinkt für große n, da helfen auch keine Krücken)

von P. Dee (Gast)


Lesenswert?

Εrnst B✶ hat recht. Wie soll ich sonst darauf kommen, daß es noch 
Alternativen gibt.

von P. Dee (Gast)


Lesenswert?

PS: Ist der Geschwindigkeitsunterschied wirklich so bedeutend?

von Theor (Gast)


Lesenswert?

Die Frage ist in StackOverflow gestellt und wird dort auch beantwortet.

von Εrnst B. (ernst)


Lesenswert?

P. Dee schrieb:
> PS: Ist der Geschwindigkeitsunterschied wirklich so bedeutend?

Bei 5 Einträgen: nein.
Bei 5 Mio Einträgen: Ja.

Beim Sprung 5 -> 5Mio Einträge wird die Array/Listen-Version um den 
Faktor 1000000 langsamer.
Die Map/HashMap-Version nur um den Faktor 20 (Pi-Mal-Daumen)

von Der Andere (Gast)


Lesenswert?

P. Dee schrieb:
> PS: Ist der Geschwindigkeitsunterschied wirklich so bedeutend?

Kommt darauf an ob in deiner Liste 10 oder 10 Millionen Einträge sind.

Die Idee mit den Arrays widerspricht jedem OO Denken.
Ausserdem ist lineares Suchen so ziemlich das schlechteste. Dann 
sortiert man zumindest und sucht binär. Dafür gibts fertige statische 
Methoden in der Klasse Arrays.

Ansonsten haben Jim und Ernst natürlich recht.

von P. Dee (Gast)


Lesenswert?

Der Andere schrieb:
> Dann
> sortiert man zumindest und sucht binär. Dafür gibts fertige statische
> Methoden in der Klasse Arrays.

Wie sieht das denn bei einer HashMap und Macadressen aus?

Gegenwärtig habe ich HashMap<String,test>, während String für die 
mac-adresse steht.

Suchen tue ich über

if (testobjekt.containsKey(macadresse))
                    {
}

Geht es noch schneller?

von Peter II (Gast)


Lesenswert?

P. Dee schrieb:
> Geht es noch schneller?

ja, die mac binär speichern -> es muss weniger verglichen werden.

keine Ahnung wie man das in Java macht.

von Der Andere (Gast)


Lesenswert?

P. Dee schrieb:
> Geht es noch schneller?

Zum 3. Mal: Die Geschwindigkeit hängt von der Menge der Elemente in 
deiner Liste ab.
Wie wäre es wenn du einfach mal eine Testreihe mit deinen möglichen 
Alternativen machst, dann weisst du was schneller ist.

von Pelle (Gast)


Lesenswert?

P. Dee schrieb:
> Gegenwärtig habe ich HashMap<String,test>
> Geht es noch schneller?

Wie kommst du darauf, dass es noch schneller sein muss? Hast du schon 
darüber nachgedacht, ob - in Anbetracht der maximalen Anzahl der 
Elemente - O(n), O(log n) oder O(1) angesagt ist (bei den von dir 
benötigten Operationen)? Auch das Testen der Performance dürfte nicht 
lange dauern.

> Wie soll ich sonst darauf kommen, daß es noch Alternativen gibt.

Ähm, Bücher über die Programmiersprache und die entsprechende 
Standardbibliothek lesen, Tutorials durcharbeiten, ... Ein paar 
Grundlagen im Bereich Algorithmen und Datenstrukturen sind auch nicht zu 
verachten. Oder habe ich die Frage falsch verstanden?

Für den Anfang konkret zum Thema:
http://openbook.rheinwerk-verlag.de/javainsel9/javainsel_13_008.htm

von Sven B. (scummos)


Lesenswert?

P. Dee schrieb:
> Εrnst B✶ hat recht. Wie soll ich sonst darauf kommen, daß es noch
> Alternativen gibt.

Indem du deine Frage formulierst als "was ist die schnellste 
Möglichkeit, um dieses Problem zu lösen" und nicht als "welche dieser 
beiden Varianten ist schneller". Woher soll ich denn wissen, was du 
sonst noch für Anforderungen hast, die nur die beiden genannten 
Möglichkeiten zulassen? Wenn ich mir nur den Code ankucke und 
rumfantasiere, kann ich auch auf die Idee kommen, dass du eine Karte 
haben willst und darauf Objekte nach Ort oder Abstand zueinander finden. 
Dann wäre die Hashmap schon wieder völlig ungeeignet und man sollte 
stattdessen einen Quadtree nehmen. Das stand aber nicht in der Frage, 
deshalb hab ich einfach die Frage beantwortet so wie sie da stand.

Die Reaktionen von euch waren jedenfalls ausgesprochen unhöflich, und 
das völlig unnötigerweise. Warum? Was bringt das? Fühlt man sich so viel 
besser, wenn man andere als Anfänger bezeichnet?

Für wenige Einträge (50) ist die Vektor-Variante übrigens trotzdem 
schneller als die HashMap, O(1) oder nicht.

: Bearbeitet durch User
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.