Vorteile von Arrays
Als ich sehen es, die Vorteile einer Liste gegenüber einem array sind ziemlich offensichtlich:
- Generika genauere Typisierung:
List<Integer>, List<? extends Number>, List<? super Integer>
. - Eine Liste Schnittstelle hat eine Reihe nützlicher Methoden:
addAll
remove
etc. Während für arrays alle gängigen Operationen mit Ausnahme der get - /set, muss durchgeführt werden in einer Weise Verfahren, indem Sie es auf eine statische Methode. - Sammlungen bieten verschiedene Implementierungen wie
ArrayList
LinkedList
unmodifieable und synchronisiert die Listen, die versteckt werden können, die unter eine gemeinsame Liste Schnittstelle. - OOB-Länge-Steuerelement.
Als Nachteile kann ich nur erwähnen das fehlen syntaktischer Zucker und ein Laufzeit-Typ-Prüfung. Zur gleichen Zeit die Unterstützung der beiden Strukturen erfordert häufige Verwendung von asList
und toArray
Methoden, die macht den code weniger lesbar. Also ich bin gespannt, ob es irgendwelche wichtigen Vorteile der Verwendung von arrays, die ich vermisse.
InformationsquelleAutor der Frage Vitalii Fedorenko | 2010-05-16
Schreibe einen Kommentar Antworten abbrechen
Du musst angemeldet sein, um einen Kommentar abzugeben.
Arrays sind effizienter, sowohl in Bezug auf die Verarbeitungszeit und Speicherbedarf. Dies gilt insbesondere, wenn Sie in Betrieb sind, auf primitive Typen wie
int
oderlong
daList
erfordert, dass alle Elemente, eingehüllt in eineObject
(wieInteger
oderLong
). Während die autoboxing features von Java 5 reduziert die Menge an code, den Sie benötigen, für eine solche Verpackung und Auspacken, wird es nicht entfernen Sie die performance-Probleme, die als wrapper-Objekte werden derzeit noch erstellt.Jedoch die meisten Anwendungen wahrscheinlich nicht haben Engpässe in der Leistung in Bezug auf diese Fragen, so dass in den meisten Fällen
List
- und andere Sammlungen sollten in Ordnung sein. In diesen Fällen, die einfache Programmierung überwiegt die Zunahme der Speicher-oder CPU-Auslastung, undList
ist die richtige Wahl.InformationsquelleAutor der Antwort markusk
Wenn Ihre Liste nicht Häufig ändern, Listen hinzufügen viel zusätzliches Gewicht zu dem Objekt, das Sie niemals benutzen werden. Wenn Sie versuchen, auszuführen, etwas, das muss optimiert werden, ist dies hilfreich. Das zusätzliche Gewicht macht auch die Dinge langsamer, als Sie sein würde, mit nur arrays. Allerdings, wenn Sie wissen, dass Sie müssen die Gewinne arrays geben Sie, sollten Sie nur mit Listen.
InformationsquelleAutor der Antwort unholysampler
Eine Sache, die ich nicht gesehen habe hier erwähnt: arrays können N-Dimensionen in der Erwägung, dass Listen sind beschränkt. Sie können Listen von Listen, aber die syntax (
List<List<...>>
) ist viel umständlicher als [][]InformationsquelleAutor der Antwort Guillaume
Geschwindigkeit. Sammlungen sind etwas langsamer als einfache arrays: intern die meisten noch immer arrays verwenden, aber zusätzliche Schichten von code um die. Natürlich, es sei denn, Sie haben Besondere Notwendigkeit für zusätzliche Leistung, sollten Sie dennoch mit Sammlungen.
Einem anderen kleinen Vorteil von arrays ist, dass es könnte einfacher Anruf variadic Methoden mit arrays. Dies sollte niemals ein Hauptgrund, sich für eine zu entscheiden über andere obwohl.
InformationsquelleAutor der Antwort doublep
Konstante Zeit Zugang zu jedem element mit einer sehr kleinen Konstanten. Zugriff auf ein array-element sicher dauert nur ein paar Anweisungen: ein paar lädt ein zu vergleichen, und ein Zweig. Der Zweig ist in der Regel erfolgreich, fast 100% der Zeit, also moderne hardware hat eine ausgezeichnete Arbeit der Vorhersage.
InformationsquelleAutor der Antwort Norman Ramsey
Ich denke, die theoretische Antwort ist, dass das array haben soll, eine bessere Leistung, da Generische Auflistungen haben zusätzliche Ebenen der Abstraktion. Persönlich, in ein business-app, sehe ich sehr wenig Wert bei der Verwendung von Arrays über generische Sammlungen.
InformationsquelleAutor der Antwort Doobi
Zusätzlich zu den anderen Antworten es ist eine subtile Eigenschaft des arrays, kann als ein Vorteil gegenüber Listen. Es kann illustriert werden, indem Sie den folgenden code:
Während ein array eine Unterklasse IST ein array der Superklasse Listen von Unterklassen sind NICHT die Listen der Superklassen (und es gibt einen guten Grund dafür - Generika wäre eine Art safery Fehler, wenn Sie durften).
InformationsquelleAutor der Antwort Eyal Schneider
Arrays sind besser in einer der folgenden Situationen:
Arrays sind:
Sammlungen wie Arrays:
ArrayList
- schnell gelesen und an das Ende derList
. Intern verwendet-array. Langsam, wenn Sie zur Steigerung die Größe desList
LinkedList
- schnell fügen Sie zu beiden Seiten desList
. Schnelle dynamische Größe erhöhen/verringern. Nicht verwenden intern ArraysFazit:
Ich empfehlen, die für Ihr Szenario geeignete Sammlung. Nicht der Kampf mit
Array []
weil dieCollections
- Paket bietet eine sehr komfortable API wieadd()
addAll()
etc.Referenz:
Sie finden einen ausführlichen Vergleich hier -> "Arrays vs ArrayList vs LinkedList vs..."
InformationsquelleAutor der Antwort Leni Kirilov
Es hängt wirklich von der situation. Arrays sind unglaublich schnell, aber Sie sind eine Feste Größe, und Sie sind möglicherweise nicht geeignet, wenn die Menge der Daten, die Sie verarbeiten müssen, ist sehr groß. Sammlungen, auf der anderen Seite, haben weniger Leistung, abhängig von der jeweiligen Unterklasse. Die ArrayList, zum Beispiel, ist meist nur ein wrapper um ein array-und so haben sollte ähnlich iteration speed-und Speicher-Anforderungen. Für mich, die ich verwenden in der Regel die Iterierbar<T> Schnittstelle wo immer möglich, da das gibt die größte Flexibilität, um meinen code, so dass es zu Prozess-Speicher-arrays, also Listen von Daten, die abgerufen werden, aus einer Datei oder über ein Netzwerk mit einer benutzerdefinierten iterierbar/iterator-Klasse. Wann ist es Zeit, um tatsächlich zu instanziieren des Wiederholenden Objekt, dass ich gehe, hängt von der jeweiligen situation; wenn ich die Größe wissen, und es wird in den Speicher passt auf einmal, dann habe ich einfach ein array verwenden, während, wenn es möglicherweise wachsen, dann verwende ich eine ArrayList, und wenn es braucht schnelles einfügen an beiden enden, dann verwende ich eine LinkedList.
InformationsquelleAutor der Antwort Michael Aaron Safyan