codestory

Die Anleitung zu Java ArrayList

  1. ArrayList
  2. Wie speichert ArrayList die Elemente?
  3. Examples

1. ArrayList

ArrayList ist eine Klasse, die die Interface List implementiert und alle Funktionen von List unterstützt, einschließlich optionaler Funktionen. Grundsätzlich verwaltet eine ArrayList ein Array zum Speichern seiner Elemente, das durch ein anderes Array größerer Länge ersetzt werden kann, wenn die Anzahl der ArrayList zunimmt.
public class ArrayList<E> extends AbstractList<E>
        implements List<E>, RandomAccess, Cloneable, java.io.Serializable
Unten sind sie die Eigenschaften von ArrayList:
  • Mit ArrayList können doppelte und die Elemente null enthalten sein.
  • Mit ArrayList behält die Einfügereihenfolge der Elemente bei.
  • ArrayList ist nicht synchronisiert (non synchronized), daher muss es synchronisiert werden, um in einer Umwelt Multithreading verwendet zu werden.
  • ArrayList ermöglicht den wahlfreien Zugriff auf die Elemente basierend auf dem Index.
  • Der Vorgang in ArrayList ist etwas langsamer als in LinkedList (weitere Erläuterungen finden Sie im Funktionsprinzip von ArrayList).
ArrayList ist ziemlich ähnlich mit Vector, außer dass es asynchron ist. In einer Umwelt Multithreading sollte es mit der Methode Collections.synchronizedList umbrochen werden.
ArrayList<String> arrayList = new ArrayList<String>();
        
List<String> syncList = Collections.synchronizedList(arrayList);
CopyOnWriteArrayList ist eine thread-safe Variante von ArrayList, die Sie möglicherweise verwenden möchten:
ArrayList constructors:
ArrayList()
Erstellen Sie ein leeres Objekt ArrayList mit einem internen Array mit einer Anfangskapazität von 10 Elementen.
ArrayList(Collection<? extends E> c)
Erstellen Sie ein Objekt ArrayList , das alle Elemente der angegenben Collection enthält. Die Reihenfolge der Elemente wird vom Iterator der Collection festgelegt.
ArrayList(int initialCapacity)
Erstellen Sie ein leeres Objekt ArrayList mit einem internen Array der angegebenen Anfangskapazität.

2. Wie speichert ArrayList die Elemente?

ArrayList verwaltet ein Array von Objekten. Alle Aktionen zum Hinzufügen, Einfügen oder Entfernen eines Elements aus ArrayList führen zu einer Aktionen zum Zuweisen (oder Aktualisieren) von Werten zu den anderen Elementen vom Arrays, die sich auf viele Elemente von Arrays auswirken können.
arrayList.add(X)
Wenn Sie ein Element in ArrayList hinfügen, wird es einem Element vom Array im Index arrayList.size() zugewiesen.
arrayList.add(idx,X)
Wenn Sie ein Element in ArrayList einfügen, müssen viele Elemente im Array ihre Werte aktualisieren.
arrayList.remove(idx)
Das Entfernen eines Elements am Index idx aus ArrayList führt auch dazu, dass viele Elemente vom Array mit neuen Wert aktualisieren werden.
ArrayList ersetzt das von ihm verwaltete Array durch ein neues Array mit einer größeren Länge, wenn die Anzahl der hinzugefügten Elemenete größer als die Länge des aktuellen Arrays ist.

3. Examples

Zum Beispiel: Verwenden Sie ArrayList in die Umwelt Multithreading:
ArrayList_sync.java
package org.o7planning.arraylist.ex;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class ArrayList_sync {

    public static void main(String[] args) throws InterruptedException {
        new ArrayList_sync();
    }
    
    public ArrayList_sync() throws InterruptedException {
         ArrayList<String> arrayList = new ArrayList<String>();
         
         List<String> syncList = Collections.synchronizedList(arrayList);
          
         ThreadA threadA = new ThreadA(syncList);
         ThreadB threadB = new ThreadB(syncList);
         
         threadA.start();
         threadB.start();
         
         threadA.join();
         threadB.join();
         
         for(String s: syncList)  {
             System.out.println(s);
         }
    }
    
   class ThreadA extends Thread {
        private List<String> list;
        public ThreadA(List<String> list) {
            this.list = list;
        }
        @Override
        public void run() {
            for(int i= 0; i< 1000; i++) {
                this.list.add("A "+ i);
            }
        }
    }
    
    class ThreadB extends Thread {
        private List<String> list;
        public ThreadB(List<String> list) {
            this.list = list;
        }
        @Override
        public void run() {
            for(int i= 0; i< 1000; i++) {
                this.list.add("B "+ i);
            }
        }
    }
}
Output:
...
A 938
B 898
A 939
B 899
A 940
B 900
A 941
B 901
A 942
...
ArrayList unterstütz alle in die Interface List angegebenen Funktionen, einschließlich optionaler Funktionen. Sie können die besten Beispiele für ArrayList im folgenden Artikel finden: