2010-03-06 15 views

Antwort

11

Sie sollten generell die richtige Datenstruktur für den Job wählen. Sie müssen sowohl Ihre Aufgaben als auch all die verschiedenen Optionen, die Sie haben, und deren Vergleich in Bezug auf Iteration und Suche sowie das Hinzufügen, Entfernen und Einfügen von Daten verstehen. Im Allgemeinen müssen Sie verstehen, wie die Datenstruktur auf Speicher zugreift und sie manipuliert, und Sie müssen die beste Datenstruktur auswählen, je nachdem, wie Ihre Anwendung voraussichtlich genutzt wird.

Offensichtlich ist es nicht immer klar. Aber Sie können die Ideale für verschiedene Datenstrukturen verstehen.

Zum Beispiel sind rein statische Daten fester Länge, in denen Sie nur ohne Suche iterieren, ideal für ein Array. Es ist üblich, solche Arrays in Verschlüsselungsalgorithmen zu verwenden. Wenn die Daten statisch sind, aber statt iterierend, müssen Sie suchen, möchten Sie vielleicht eine Art von Baumstruktur. Wenn Sie ein schnelles Einfügen wünschen, ist Hashing wahrscheinlich das Ideal. Wenn sich die Daten häufig ändern, möchten Sie eine Struktur, die ihre Größe effizient ändert, z. B. eine Liste.

Natürlich gibt es viele Variationen und Kombinationen von Datenstrukturen, die entwickelt wurden, um alle Arten von spezifischen Problemen zu lösen. Der Grund, warum es so viele gibt, liegt in der Wichtigkeit, die sie beim Schreiben effizienter Programme spielen. Wie auch immer, mein Punkt ist, lernen Sie über Datenstrukturen. Verstehen Sie die idealen Situationen für jeden und dann können Sie geeignete Datenstrukturen für jede Aufgabe bestimmen oder entwerfen.

2

Listen können leicht in der Größe wachsen, und Sie können Elemente in der Mitte der Liste leicht hinzufügen und entfernen. Das ist mit Arrays nicht möglich. Sie müssen jedoch überlegen, wofür Sie die Liste benötigen. Wenn Sie der Meinung sind, dass sich die Liste nicht wesentlich ändern wird, verwenden Sie stattdessen ein Array.

+1

Auto-Größenänderung ist jedoch nicht der einzige Grund. List ist an allen Collections-API-Funktionen beteiligt, sodass Sie die meisten Ihrer datenstrukturbezogenen Probleme lösen können, indem Sie einfach die API verwenden. – cherouvim

2

Von Array vs ArrayList

Ein Arraylist ist besser als Array zu Gebrauch, wenn Sie keine Kenntnisse in Voraus über Elemente Nummer haben. ArrayList sind langsamer als Arrays. Also, Wenn Sie Effizienz benötigen, versuchen Sie Arrays wenn möglich zu verwenden.

0

EDIT:
In bestimmten Fällen, wenn sie mit primitiven Typen zu tun, ist es besser, mit Arrays zu gehen, weil im Fall von Arraylists, es Boxen und Unboxing der Primitiven handelt, die etwas langsamer im Vergleich zu Handhabung sein könnte Primitive mit Arrays.

+0

natürlich können Sie den Elementtyp eines Arrays angeben. –

+0

Bitte deklarieren Sie myList nicht zu einem konkreten Typ (ArrayList). Es ist am besten, wenn Sie die Schnittstellenliste verwenden. – cherouvim

+0

Es spielt keine Rolle, wenn Sie List oder ArrayList verwenden, wenn das Feld keine öffentliche API ist. Auf Android-Geräten ist es beispielsweise weniger sinnvoll, eine Methode für den konkreten ArrayList-Typ als für die List-Schnittstelle aufzurufen. Ich neige dazu, meine private Felder den konkreten Typ zu deklarieren und die Schnittstelle in der öffentlichen API (Getters, etc) zurückzugeben. – NateS

0

Eine Sache, die man beachten sollte ist, dass die Klassen von Java Collections die allgemeine Benutzerfreundlichkeit gegenüber der Optimierung für bestimmte Szenarien bevorzugen. Wie ein früherer Responder sagte, müssen Sie also wirklich überlegen, wie Sie es verwenden werden.

Wenn Sie zum Beispiel "große" Datenstrukturen erstellen, kann ArrayList ziemlich ineffizient werden. Jedes Mal, wenn Sie das Limit des Arrays erreichen, wird ein neues (nach meiner Meinung) 2x Größe zugewiesen. Im Durchschnitt wird eine ArrayList also nur zu 75% genutzt.

Im Allgemeinen kann man die Java Collections betrachten erste Annäherungen sein, die in der Regel gut genug sind, um die meiste Zeit, und wenn Sie messbare Performance-Probleme haben, sollten Sie bereit sein Stellvertreter zu verwenden, mehr spezialisierte Sammlung Implementierungen.

In dem Fall, dass Sie erwähnen, können Sie ArrayList nur als eine bequemere Möglichkeit, mit einem Array umzugehen.

0

Ich benutze Lists, ArrayLists und c hauptsächlich, weil ich mir keine Sorgen darüber machen muss, wo der nächste freie Slot ist oder ob er groß genug ist, da Sun das schon für mich getan hat.

Verwandte Themen