In Java, sollte ich die ArrayList<Länge> oder long[] ?
Ich Schreibe ein Programm, das akzeptiert 400 zahlen vom Typ long
und ändern einige von Ihnen in Abhängigkeit von Bedingungen zur Laufzeit, und ich möchte wissen, ob ArrayList<Long>
oder long[]
.
Was schneller zu bedienen ist? Ich denke, mit long[]
da Größe ist behoben.
Speed ist nicht dein problem. Die Verwendung einer ArrayList: warum? Weil es wird wachsen automatisch und ist eine besser konzipierte Sammlung! (Ich sage, dass die Geschwindigkeit/Leistung ist nicht das problem; wenn Sie ist dann hätten Sie sich einige der performance-benchmarks, um zu beweisen mich nicht falsch! Bis dann, don ' T worry about it.)
verwenden
Sie können long [], wenn es ein paar Daten und wenn man viele Daten in tausenden wechseln Sie dann zu arralist für bessere Leistung und Sicherheit.
"wechseln Sie auf arralist für bessere Leistung und Sicherheit" Sicherheit? Wie funktioniert die Verwendung eines
und wie funktioniert es besser, für eine Menge von Daten über längere[]?
verwenden
long[]
wenn Größe ist festSie können long [], wenn es ein paar Daten und wenn man viele Daten in tausenden wechseln Sie dann zu arralist für bessere Leistung und Sicherheit.
"wechseln Sie auf arralist für bessere Leistung und Sicherheit" Sicherheit? Wie funktioniert die Verwendung eines
ArrayList
bieten eine bessere Sicherheit?und wie funktioniert es besser, für eine Menge von Daten über längere[]?
InformationsquelleAutor Pratik | 2012-12-26
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn die Größe fixiert ist,
long[]
ist schneller, aber es ermöglicht ein weniger wartbar-API, weil es nicht implementiert dieList
- Schnittstelle.Hinweis: eine
long[]
ist schneller für 2 Gründe:long
s und nicht box-ObjektLong
s (ermöglicht auch eine bessere cache-Performance, da dielong
s zugeordnet sind contigously und dieLong
s sind nicht garantiert)Dennoch, für einfachere Wartbarkeit - würde ich verwendet haben ein
List<Long>
, es sei denn, performace ist sehr kritisch in diesem Teil des Programms.Wenn Sie diese Sammlung sehr oft in einer engen Schleife - und der profiler sagt, es ist in der Tat ein Flaschenhals - ich würde dann wechseln Sie zu einer effizienteren
long[]
.long[]
ist klarer/einfacher und dies ist meist wichtiger, dass sich die Leistung.Ich würde immer noch verwenden
List<Long>
auch wenn die Leistung wichtig waren, und nur einLongArrayList
Klasse unterstützt durchlong[]
.InformationsquelleAutor amit
So weit wie Geschwindigkeit geht, ist es fast egal, für eine Liste von 400 items. Wenn Sie brauchen, um zu wachsen Ihre Liste dynamisch
ArrayList<Long>
ist besser; wenn die Größe fixiert ist,long[]
vielleicht besser (und ein bisschen schneller, obwohl wieder, Sie würde wahrscheinlich nicht bemerken den Unterschied in den meisten Situationen).Es ist im ersten Satz der Frage: "ich Schreibe ein Programm, das akzeptiert 400 zahlen vom Typ long..."
Sorry. Habe nicht bemerkt, dass ein Teil früher. Danke. Aber, wie hast du feststellen, dass es keinen Unterschied für die gegebene Zahl?
InformationsquelleAutor dasblinkenlight
Gibt es einige Dinge, die noch nicht erwähnt wurde in anderen Antworten:
Einer generischen Auflistung ist in Wirklichkeit eine Sammlung von
Object
s, oder besser gesagt, dies ist, was der Java-compiler daraus machen. Dies ist währendlong[]
wird immer das bleiben, was es ist.Folge der erste Punkt ist, dass wenn Sie etwas tun, schließlich steckt etwas anderes, dann
Long
in Ihrer Sammlung, in bestimmten Situationen wird der compiler lassen es durch (weil Java-Typ-system ist ungesund, also als Beispiel, es wird Ihnen erlauben, Verallgemeinerung und dann re-cast zu einer völlig unterschiedlichen Art).Eine Allgemeine Konsequenz aus diesen beiden ist, dass Java generics sind halb gebacken und in manchen weniger trivialen Fällen wie beispielsweise reflektion, Serialisierung etc. kann die "überraschung". Es ist in der Tat sicherer zu normalen arrays, dann Generika.
Dieses Beispiel ist ein bisschen künstlich, da ist es schwierig zu kommen mit einer kurzen, überzeugenden Beispiel, aber glauben Sie mir, in weniger trivialen Fällen, wenn Sie müssen, verwenden Sie reflektion und unsicher wirft, ist dies durchaus eine Möglichkeit.
Nun, Sie haben zu Bedenken, dass neben dem, was zumutbar ist, gibt es eine tradition. Jede Gemeinschaft hat eine Reihe von Sitten und tradition. Es gibt eine Menge von oberflächlichen überzeugungen, wie diejenigen, die hier geäußert zB. wenn jemand behauptet, dass die Umsetzung
List
- API ist eine bedingungslose Güte, und wenn dies nicht geschieht, dann muss es schlecht sein... Das ist nicht nur eine vorherrschende Meinung, dies ist, was die überwältigende Mehrheit der Java-Programmierer glauben. Nachdem alle, es spielt keine Rolle , dass viel, und Java als Sprache hat viel mehr andere Mängel... also, wenn Sie wollen, sichern Sie sich Ihre job-interview oder einfach vermeiden Konflikte mit anderen Java-Programmierer, dann verwenden Sie Java-generics, egal, der Grund. Aber wenn Sie es nicht mögen - gut, vielleicht nur eine andere Sprache 😉InformationsquelleAutor
long[] beides ist viel schneller und braucht viel weniger Speicher. Lesen Sie "Effective Java" Item 49: "Lieber primitive Typen, boxed primitives"
InformationsquelleAutor Evgeniy Dorofeev
Finde ich besser zu bedienen ArrayList, weil es ist viel viel leichter zu pflegen in lange Läufe. In Zukunft, wenn die Größe des array wird erhöht, der über 400, dann die Aufrechterhaltung eines long[] hat viel Aufwand in der Erwägung, dass ArrayList wächst dynamisch, so dass Sie nicht brauchen, um sorgen über eine zunehmende Größe.
Auch, löschen von element behandelt wird, das in viel besseren Weg, von ArrayList als statische arrays (long []), da Sie automatisch die Reorganisation der Elemente, so dass Sie immer noch erscheinen, als geordnete Elemente.
Statische arrays sind schlimmer.
In diesem Fall gehen bei statischen arrays.
InformationsquelleAutor user85
Warum nicht mit einem der zahlreichen Liste von Implementierungen, die auf primitiven Typen? TLongArrayList zum Beispiel. Es kann genauso verwendet werden wie Javas Liste, sondern basiert auf einem long[] array. So haben Sie die Vorteile beider Seiten.
HPPC hat einen kurzen überblick über einige Bibliotheken: https://github.com/carrotsearch/hppc/blob/master/ALTERNATIVES.txt
InformationsquelleAutor USSEraser