Lassen Sie uns zunächst das Wissen über Arraylist vorstellen:
(Lernvideo-Sharing:Java-Lehrvideo)
Arraylist: Die unterste Ebene basiert auf dynamischen Arrays. Gemäß der folgenden Tabelle erfolgt der wahlfreie Zugriff auf Array-Elemente effizient, gegen Ende des Arrays Das Hinzufügen von Elementen ist effizient
Das Löschen von Daten im Array und das Hinzufügen von Daten zur Mitte des Arrays ist jedoch ineffizient, da das Array verschoben werden muss. Das schlimmste Szenario besteht beispielsweise darin, das erste Array-Element zu löschen, was erfordert, dass das 2. bis n-te Array-Element jeweils um ein Bit nach vorne verschoben wird. Der Grund, warum es als dynamisches Array bezeichnet wird, liegt darin, dass die Arraylist erweitert werden kann, wenn die Array-Elemente ihre Kapazität überschreiten (für JDK1.8 beträgt die Kapazität des Arrays nach der Erweiterung das 1,5-fache der Kapazität vor der Erweiterung. Die größte Array-Kapazität in der Arraylist). Der Quellcode ist Integer .MAX_VALUE-8, für die frei gewordenen 8 Bits lautet die aktuelle Erklärung:
①Speicher-Headerwörter;
②Um einige Maschinenspeicherüberläufe zu vermeiden und die Wahrscheinlichkeit von Fehlern zu verringern,
③Das Maximum kann immer noch sein unterstützt Integer.MAX_VALUE (wenn Integer.MAX_VALUE-8 den Bedarf immer noch nicht erfüllen kann).
Das Folgende ist Teil des Quellcodes von Arraylist: Arraylist-Erweiterung:
(Weitere Interviewfragen zum Teilen:Java-Interviewfragen und -antworten)
Daten zu Arraylist hinzufügen: (Am Ende hinzufügen). array)
Daten zum Array hinzufügen Fügen Sie ein Array an der angegebenen Position hinzu:
Sie können sehen, dass die add()-Operation sehr effizient ist, solange die aktuelle Kapazität der ArrayList groß genug ist bis zum Ende des Arrays. Beim Hinzufügen von Daten zur angegebenen Position des Arrays wird eine große Anzahl von Vorgängen zum Verschieben und Kopieren des Arrays ausgeführt. Wenn das Array kopiert wird, wird schließlich die Methode System.arraycopy() aufgerufen, sodass die Effizienz der Operation add() immer noch recht hoch ist. Dennoch ist es beim Hinzufügen von Daten zu einem bestimmten Speicherort immer noch langsamer als Linkedlist, bei dem zum Hinzufügen von Daten nur der Zeiger geändert werden muss. Das Löschen eines Arrays in Arraylist erfordert auch das Verschieben des Arrays, was langsamer ist.
Linkedlist ist ein dynamisches Array, das auf verknüpften Listen basiert und nur die Zeigerrichtung ändern muss. Die durchschnittliche Effizienz beim Zugriff auf Daten ist jedoch gering und die verknüpfte Liste muss durchlaufen werden. Arraylist erhält Datenquellcode: (je nach Indexzugriff, hohe Effizienz)
Linkedlist-Zugriffsdatenquellcode: (node()-Funktion durchläuft die verknüpfte Liste)
Zusammenfassung:
1. Für zufällige Zugriffe auf get und set ist ArrayList besser als LinkedList, da LinkedList das Bewegen des Zeigers erfordert.
Bei den Neu- und Löschvorgängen Hinzufügen und Entfernen hat LinedList den Vorteil, da ArrayList Daten verschieben muss.
2. Entsprechende Effizienzprobleme:
Verwandte Empfehlungen:Java-Einführungs-Tutorial
Das obige ist der detaillierte Inhalt vonDer Unterschied zwischen Arraylist und Linkedlist im Java-Interview. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!