Ein häufiger Fehler von neuen Programmierern ist es, alle Sammlungen von Daten in einfachen Arrays zu speichern . Während die grundlegende Array ist eine große Datenstruktur , hat es eine Reihe von Schwachstellen auf , die mit einigen der anderen grundlegende Datenstrukturen vermieden werden können. Das Java Collections Framework bietet eine Reihe von einfach zu bedienenden Schnittstellen und Klassen , die einige der häufigsten Datenstrukturen in der Informatik zu implementieren. Basic- Array
Das Beste an einem grundlegenden Array in Java ist, dass es aus gelesen und geschrieben , schnell . Jedoch dauerhaft Hinzufügen oder Entfernen eines Elements aus dem Array erfordert viel Zeit , weil Java nicht unterstützt dynamische Arrays . Jedes Mal, wenn Sie die Größe eines Arrays in Java , müssen Sie das Array wieder neu aus dem Nichts, ein Element zu einem Zeitpunkt , mit einer Schleife. Sie können dies durch immer initialisiert Ihre Arrays auf die maximale Größe zu jeder Zeit während der Laufzeit erforderlich zu vermeiden, aber das kann ein dramatischer Abfall der Speicher sein und ist nur schlechtes Design im Allgemeinen.
ArrayList
Die ArrayList -Klasse aus dem java.util Bibliothek werden einige dieser Probleme durch Umwickeln eine Reihe von Funktionen rund um Geschäftsführer einer versteckten Array. Dieses Array wird strategisch erhöht und verringert in der Größe regelmäßig so , dass im Durchschnitt , das Hinzufügen und Entfernen von Elementen erfolgt sehr schnell . Aber gelegentlich , die verborgene , interne Array muss einfach geändert werden , und in diesen Fällen wird die Operation eine viel größere Menge an Zeit erfordern .
LinkedList
< p> die LinkedList geht weiter als die ArrayList und hat eigentlich keinen Array immer, versteckte oder nicht. Stattdessen sind Datensätze miteinander verkettet werden, in Knoten , wobei jeder Knoten enthält einen Verweis auf die Speicheradresse des nächsten . Der Vorteil einer LinkedList ist, dass das Hinzufügen oder Entfernen neue Stücke von Daten immer dann sehr schnell ist und es niemals eine Größenänderung eines Arrays durchgeführt werden. Jedoch ist es unmöglich, die Daten in der Mitte der Liste , ohne durch die gesamte Liste von der Vorder-oder Rückseite zugreifen , so dass die Zeit, die Daten aus der Mitte einer LinkedList lesen können erheblich sein.
Die ArrayList können Daten überall in ihm sehr schnell zugegriffen werden kann, und in der Regel schnell ändern, aber manchmal erfordert zusätzliche Zeit , wenn seine internen Array neu aufgebaut werden muss . Die LinkedList können jederzeit und Entfernen von Daten aus der Liste sehr schnell, aber das Abrufen von Daten aus der Mitte der Liste kann sehr zeitaufwändig sein . Dies macht die LinkedList eine gute Wahl für Stacks und Warteschlangen, die nur ganz am Vorder-oder Rückseite zugegriffen werden , aber die ArrayList eine bessere Wahl als Ersatz für die insgesamt einfache Array.
HashSet
HashSet , wie sowohl der ArrayList und LinkedList , können Daten hinzugefügt und entfernt sehr, sehr schnell, und es hat auch noch einen weiteren Vorteil : a HashSet extrem schnell durchsucht werden , schneller als ein Array , ArrayLists oder LinkedLists . Er tut dies , indem eine mathematische Operation auf einem Teil der Daten der Index in einem Array zu bestimmen, und dann die die gleiche Operation an den Daten für den Index der gewünschten Daten zu erhalten gesucht werden.
das ist verwirrend , keine Sorge . Das Wichtigste ist, dass HashSets ideal für Gruppen von Daten, die müssen durch immer und immer wieder gesucht werden, sind . Aber sie haben auch eine signifikante Schwäche : a Hashset nicht pflegen die Reihenfolge der Daten , die in sie gesetzt wird , und die Sortierung der Elemente in der Gruppe kann von einem Moment auf den anderen ändern. Zum Beispiel , in einem basischen Array , wenn ein Element am Index 0 gesetzt wird , kann der Programmierer darauf restlichen zählen bei Index 0 ewig , bis sie es ändert . Aber in einem HashSet kann ein Element am Index 0 in einem Moment gut bei Index 327 sein im nächsten Moment .