JavaRush /Java-Blog /Random-DE /ArrayList in Java

ArrayList in Java

Veröffentlicht in der Gruppe Random-DE
Bei der Entwicklung ist es oft schwierig vorherzusagen, welche Array-Größen benötigt werden. Daher ist die Funktion der dynamischen Zuweisung von Speicher während der Programmausführung für jede Programmiersprache notwendig. Ein dynamisches Array ist ein Array, dessen Größe sich während der Programmausführung ändern kann. In Java gibt es zu diesem Zweck eine ArrayList- Klasse .

Was ist die ArrayList-Klasse?

ArrayList ist eine veränderbare Array-Implementierung der List-Schnittstelle, Teil des Collection Framework, die für die Liste (oder das dynamische Array) verantwortlich ist, die sich im Paket java.utils befindet. Diese Klasse implementiert alle optionalen Listenoperationen und stellt Methoden zur Steuerung der Größe des Arrays bereit, das zum Speichern der Liste verwendet wird. ArrayList basiert auf der Idee eines dynamischen Arrays. Nämlich die Möglichkeit, Elemente hinzuzufügen und zu entfernen und diese je nach Bedarf zu vergrößern oder zu verkleinern.

Was speichert ArrayList?

Nur Referenztypen, alle Objekte, einschließlich Klassen von Drittanbietern. Strings, Ausgabestreams, andere Sammlungen. Wrapper-Klassen werden zum Speichern primitiver Datentypen verwendet.

ArrayList-Konstruktoren

  1. Anordnungsliste()

    Leerer Konstruktor mit anfänglicher interner Array-Kapazität = 10.

    ArrayList<String> list = new ArrayList<>();

    Es empfiehlt sich, in spitzen Klammern die Art der gespeicherten Werte anzugeben. Im obigen Beispiel - String.

  2. ArrayList(Collection <? erweitert E> c)

    Der Konstruktor akzeptiert eine andere Sammlung und erstellt ein neues Array mit den Elementen der übergebenen Sammlung:

    ArrayList<String> list2 = new ArrayList<>(list);

    Die Reihenfolge der Elemente in der neuen Liste ist dieselbe wie im Original.

  3. ArrayList(int initialCapacity)

    Der Konstruktorparameter ist der Wert der Anfangsgröße des internen Arrays.

    ArrayList<String> list2 = new ArrayList<>(10000);

    Wenn beim Hinzufügen neuer Elemente nicht mehr genügend Speicherplatz in der zugrunde liegenden ArrayList vorhanden ist, wird ein neues, größeres Array erstellt und die Daten werden dorthin kopiert. Wenn Sie beim Schreiben Ihres Codes im Voraus wissen, dass eine große Anzahl von Elementen im Array verarbeitet wird, sollten Sie zur Optimierung einen größeren Wert angeben.

ArrayList-Methoden

    Nachfolgend sind die Hauptmethoden von ArrayList aufgeführt.

  • add(E e)

    Fügt am Ende der Liste ein neues Element hinzu. Gibt einen Wert zurück boolean( true – Erfolg, false – nicht hinzugefügt):

    ArrayList<String> list = new ArrayList<>();
    list.add("Hello");
  • add(int index, E-Element)

    Fügt ein Element elementam Positionsindex hinzu. Beim Hinzufügen werden alle Elemente rechts vom angegebenen Index um 1 Position nach rechts verschoben:

    list.add(0, "Amigo");

    Sehr nützlich, wenn Sie ein Element irgendwo in einer Liste einfügen müssen, aber für häufige Einfügungsvorgänge am Anfang und in der Mitte der ArrayList möglicherweise keine sehr gute Wahl ist – Sie sollten sich LinkedList ansehen.

  • addAll(Sammlung <? erweitert die E>-Sammlung)

    Fügt alle Elemente der Sammlung in der Reihenfolge, in der sie in der Sammlung erscheinen, zu einer Liste hinzu.

  • addAll(int index, Sammlung <? erweitert E> Sammlung)

    Добавление всех элементов collection в список начиная с индекса index. При этом все элементы сдвинутся вправо на количество элементов в списке collection:

    ArrayList<String> secondList = new ArrayList<>();
    secondList.addAll(list);
    System.out.println(„Erste Ergänzung:“ + secondList);
    secondList.addAll(1, list);
    System.out.println(„Zweiter Zusatz in der Mitte:“ + secondList);

    Вывод:

    
    Первое добавление: [Amigo, Hello]
    Второе добавление в середину: [Amigo, Amigo, Hello, Hello]

    Методы addAll() также возвращают boolean-результат добавления элементов.

  • clear()

    Удаление всех элементов из списка.

  • clone()

    kehrt zurück ein Objekt-копию массива:

    ArrayList<String> copyOfSecondList = (ArrayList<String>) secondList.clone();
    secondList.clear();
    System.out.println(copyOfSecondList);

    Вывод:

    
    [Amigo, Amigo, Hello, Hello]

    Следует обратить внимание, что метод clone() возвращает Object, так что после его вызова потребуется сделать приведение к необходимому классу.

    При клонировании создается новый независимый ein Objekt. В примере показано, Wie очищение клонированного ein Objektа не сказалось на составе его клона.

  • contains(Object o)

    Проверка наличие ein Objektа в списке, возвращает boolean-Bedeutung.

    System.out.println(copyOfSecondList.contains("Hello"));
    System.out.println(copyOfSecondList.contains("Check"));

    Вывод:

    
    true
    false
  • ensureCapacity(int minCapacity)

    Увеличивает размер внутреннего массива, чтобы в него поместилось количество элементов, переданных в minCapacity. Если массив достаточно вместителен, ниWieие преобразования не производятся.

    Этот метод полезен, когда возникает потребность вместить большое количество элементов в несколько итераций. Например, при создании списка емкость его внутреннего массива — 10. При загрузке данных по сети они обрабатываются асинхронно порциями и результаты помещаются в массив. Если ожидается доставка 10 000 элементов, может быть неэффективно просто добавлять эти данные каждый раз: достаточно будет в начале обработки вызвать метод ensureCapaciry(10000) и записывать туда данные по мере необходимости.

  • forEach(Consumer<? super E> action)

    Обработать в цикле ArrayList можно стандартными способами, цикл for:

    // Erster Weg
    for(int i = 0; i< secondList.size(); i++) {
       System.out.println(secondList.get(i));
    }
    И цикл for-each:
    // Zweiter Weg
    for(String s : secondList) {
       System.out.println(s);
    }

    В классе ArrayList есть метод для обработки каждого Element, который называется также, forEach. В качестве аргумента передается реализация интерфейса Consumer, в котором нужно переопределить метод accept():

    secondList.forEach(new Consumer<String>() {
       @Override
       public void accept(String s) {
           System.out.println(s);
       }
    });

    Вывод:

    
    Amigo
    Amigo
    Hello
    Hello

    Метод accept принимает в качестве аргумента очередной элемент того типа, который хранит в себе ArrayList. Пример для Integer:

    ArrayList<Integer> integerList = new ArrayList<>();
    integerList.forEach(new Consumer<Integer>() {
       @Override
       public void accept(Integer integer) {
           System.out.println(integer);
       }
    });

    Метод action() будет выполнен для каждого Element.

  • get(int index)

    kehrt zurück элемент, который расположен в указанной позиции списка.

    Если index < 0 oder index >= максимального количества элементов списка, будет выброшено исключение IndexOutOfBoundsException.

    Это основной метод получения Element из списка, время извлечения Element по индексу всегда будет одинаковым, независимо от размера ArrayList.

  • indexOf(Object o)

    Метод возвращает индекс первого вхождения Element в списке. Если Element не существует в списке, метод вернет -1.

  • isEmpty()

    Метод возвращает true, если список пустой, false в обратном случае.

    Если в списке содержатся только элементы null, метод вернет false. Иными словами, null элементы также учитываются этим методом.

  • iterator()

    kehrt zurück итератор для списка для последующего использования в цикле oder при любой другой обработке.

    Итератор для ArrayList — fail-fast. Это значит, что если коллекция изменится во время итерации, будет выброшено исключение ConcurrentModificationException. Подробнее об fail-fast и его противоположности fail-safe можно почитать здесь.

  • lastIndexOf(Object o)

    Функционал метода похож на indexOf(), отличие в том, что возвращается индекс последнего Element в списке.

    Если элемент не найден, также возвращает -1.

  • remove(int index)

    Удаление Element в указанной позиции индекса. После удаления сдвигает все элементы влево для заполнения освободившегося пространства.

    Если index<0 oder >= количество элементов списка, будет выброшено исключение IndexOutOfBoundsException. В результате метод возвращает элемент, который был удален.

  • remove(Object o)

    Метод удаляет из списка переданный элемент o. Если элемент присутствует в списке, он удаляется, а все элементы смещаются влево. Если элемент существует в списке и успешно удален, метод возвращает true, в обратном случае — false.

  • removeAll(Collection<?> c)

    Если необходимо удалить несколько элементов, не стоит делать это в цикле по условию: гораздо удобнее и безопаснее воспользоваться методом removeAll(). Он принимает коллекцию элементов, которая будет удалена из списка.

    Коллекция должна содержать элементы того же типа, которые хранит целевой список. В обратном случае будет выброшен ClassCastException. Метод вернет true, если список был изменен в результате вызова метода.

  • set(int index, E element)

    Замена Element в указанной позиции index на переданный element. Индекс также должен быть больше нуля и меньше индекса последнего Element, иначе будет выброшено исключение IndexOutOfBoundsException.

  • size()

    Лучший способ (практически единственный) для того, чтобы узнать размер массива.

  • sort(Comparator<? super E> c)

    Сортировка списка по заданному правилу. Правило сортировки представляет собой реализованный интерфейс Comparator с переопределенным методом compareTo().

    Переопределение нужно, если коллекция содержит ein Objektы собственного класса. При работе со стандартными классами (Integer, String и так далее) переопределение compareTo() требуется только для нестандартной сортировки.

  • toArray()

    Превращает список в фиксированный массив. Обратите внимание, что метод возвращает массив ein Objektов (Object[]). Если необходимо привести список в массив ein Objektов определенного типа, в качестве параметра в метод можно передать массив, куда будут перемещены элементы списков.

    Пример:

    String[] array = new String[secondList.size()];
    secondList.toArray(array);
    for(int i = 0; i< array.length; i++) {
       System.out.println(array[i]);
    }

    Вывод:

    
    Amigo
    Amigo
    Hello
    Hello
ArrayList-Methoden in Java werden im JavaRush-Kurs erlernt. Die erste Bekanntschaft findet auf der siebten Ebene der Java-Syntax-Quest in der Vorlesung „ArrayList-Klasse“ statt . Auf derselben Ebene gibt es Aufgabensammlungen – eins und zwei – , in denen Sie ArrayList-Methoden verwenden müssen, es werden zusätzliche Beispiele für die Arbeit mit ArrayList und Generika gegeben und der Unterschied zwischen ArrayList und LinkedList wird erläutert. Da es sich um ein umfangreiches Studienthema handelt, wird im Kurs auf den folgenden Ebenen in der einen oder anderen Form auf Arraylist in Java zurückgegriffen (die Methoden dieser Klasse sind nur ein Teil des gesamten Wissensbestands, in den es sich zu vertiefen lohnt). des Trainings - Kern, Sammlungen, Multithreading. Wir glauben, dass die tägliche Praxis des Schreibens von Code der Hauptschlüssel zum Erfolg beim Programmieren ist. Daher besteht JavaRush zu 80 % aus praktischen Aufgaben, Miniprojekten und Spielaufgaben. All dies sind Hunderte von Stunden Programmieren, die Ihnen helfen werden, Ihre Fähigkeiten zu verbessern.

Links zur weiteren Lektüre

  1. Ein ausführlicher Artikel über dynamische Arrays , genauer gesagt über ArrayListund LinkedList, die ihre Rolle in der Java-Sprache erfüllen.
  2. Ein Artikel über das Entfernen von Elementen aus einer ArrayList .
  3. Vortrag über die Arbeit mit ArrayList in Diagrammen und Bildern .
Kommentare
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION