JavaRush /Blog Java /Random-FR /Liste de tableaux en Java

Liste de tableaux en Java

Publié dans le groupe Random-FR
Lors du développement, il est souvent difficile de prédire quelle taille de tableaux sera nécessaire. Par conséquent, la fonction d’allocation dynamique de mémoire pendant l’exécution du programme est nécessaire pour chaque langage de programmation. Un tableau dynamique est un tableau dont la taille peut changer pendant l'exécution du programme. En Java, il existe une classe ArrayList à cet effet .

Qu'est-ce que la classe ArrayList ?

ArrayList est une implémentation de tableau mutable de l'interface List, qui fait partie de Collection Framework, qui est responsable de la liste (ou du tableau dynamique) située dans le package java.utils. Cette classe implémente toutes les opérations de liste facultatives et fournit des méthodes pour contrôler la taille du tableau utilisé pour stocker la liste. ArrayList est basé sur l'idée d'un tableau dynamique. À savoir la possibilité d’ajouter et de supprimer des éléments, tout en augmentant ou en diminuant selon les besoins.

Que stocke ArrayList ?

Uniquement les types de référence, tous les objets, y compris les classes tierces. Chaînes, flux de sortie, autres collections. Les classes Wrapper sont utilisées pour stocker les types de données primitifs.

Constructeurs ArrayList

  1. Liste des tableaux()

    Constructeur vide avec capacité initiale du tableau interne = 10.

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

    Il est conseillé d'indiquer le type de valeurs stockées entre crochets. Dans l'exemple ci-dessus - String.

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

    Le constructeur accepte une autre collection, créant un nouveau tableau avec les éléments de la collection passée :

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

    L'ordre des éléments dans la nouvelle liste sera le même que celui d'origine.

  3. ArrayList (int initialCapacity)

    Le paramètre constructeur est la valeur de la taille initiale du tableau interne.

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

    Si l'ArrayList sous-jacent manque d'espace lorsque de nouveaux éléments sont ajoutés, un nouveau tableau plus grand est créé et les données y sont copiées. Si vous savez à l'avance lors de l'écriture de votre code qu'un grand nombre d'éléments seront traités dans le tableau, vous devez spécifier une valeur plus grande à des fins d'optimisation.

Méthodes ArrayList

    Vous trouverez ci-dessous les principales méthodes d’ArrayList.

  • ajouter(E e)

    Ajoute un nouvel élément à la fin de la liste. Renvoie boolean-value ( true - succès, false - non ajouté) :

    ArrayList<String> list = new ArrayList<>();
    list.add("Hello");
  • ajouter (index int, élément E)

    Ajoute un élément elementà l'index de position. Lors de l'ajout, tous les éléments à droite de l'index spécifié sont décalés d'une position vers la droite :

    list.add(0, "Amigo");

    Très utile lorsque vous devez insérer un élément n'importe où dans une liste, mais pour les opérations d'insertion fréquentes au début et au milieu de ArrayList, ce n'est peut-être pas un très bon choix - vous devriez consulter LinkedList.

  • addAll (Collection <? extends E> collection)

    Ajoute tous les éléments de la collection à une liste dans l'ordre dans lequel ils apparaissent dans la collection.

  • addAll (int index, Collection <? extends E> collection)

    Ajout de tous les éléments collectionà la liste à partir de index index. Dans ce cas, tous les éléments seront décalés vers la droite du nombre d'éléments dans la liste collection:

    ArrayList<String> secondList = new ArrayList<>();
    secondList.addAll(list);
    System.out.println("First addition: " + secondList);
    secondList.addAll(1, list);
    System.out.println("Second addition in the middle: " + secondList);

    Conclusion:

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

    Les méthodes addAll()renvoient également le résultat booléen de l’ajout d’éléments.

  • clair()

    Suppression de tous les éléments de la liste.

  • cloner()

    Renvoie un objet copie du tableau :

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

    Conclusion:

    
    [Amigo, Amigo, Hello, Hello]

    Veuillez noter que la méthode clone()renvoie Object, donc après l'avoir appelée, vous devrez effectuer un cast vers la classe requise.

    Le clonage crée un nouvel objet indépendant. L'exemple montre comment la purification d'un objet cloné n'a pas affecté la composition de son clone.

  • contient (Objet o)

    Проверка наличие an object в списке, возвращает boolean-meaning.

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

    Вывод:

    
    true
    false
  • ensureCapacity(int minCapacity)

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

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

  • forEach(Consumer<? super E> action)

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

    // First way
    for(int i = 0; i< secondList.size(); i++) {
       System.out.println(secondList.get(i));
    }
    И цикл for-each:
    // Second way
    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)

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

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

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

  • indexOf(Object o)

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

  • isEmpty()

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

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

  • iterator()

    returns итератор для списка для последующего использования в цикле or при любой другой обработке.

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

  • lastIndexOf(Object o)

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

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

  • remove(int index)

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

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

  • supprimer (Objet o)

    La méthode supprime l'élément passé de la liste o. Si un élément est présent dans la liste, il est supprimé et tous les éléments sont décalés vers la gauche. Si l'élément existe dans la liste et est supprimé avec succès, la méthode renvoie true ; sinon, false .

  • supprimerTout(Collection<?> c)

    Si vous devez supprimer plusieurs éléments, vous ne devez pas le faire en boucle conditionnelle : il est beaucoup plus pratique et plus sûr d'utiliser la méthode removeAll(). Il accepte une collection d'éléments qui seront supprimés de la liste.

    La collection doit contenir des éléments du même type que celui stocké par la liste cible. Sinon il sera jeté ClassCastException. La méthode retournera true si la liste a été modifiée à la suite de l'appel de méthode.

  • set (index int, élément E)

    Remplace l'élément à la position spécifiée indexpar celui passé element. L'index doit également être supérieur à zéro et inférieur à l'index du dernier élément, sinon une exception sera levée IndexOutOfBoundsException.

  • taille()

    Le meilleur moyen (presque le seul) de connaître la taille d'un tableau.

  • trier(Comparateur<? super E> c)

    Trier la liste selon une règle donnée. Une règle de tri est une interface implémentée Comparatoravec une méthode remplacée compareTo().

    La substitution est nécessaire si la collection contient des objets de sa propre classe. Lorsque vous travaillez avec des classes standard ( Integer, Stringet ainsi de suite), le remplacement compareTo()n'est requis que pour le tri non standard.

  • versArray()

    Convertit une liste en un tableau fixe. Notez que la méthode renvoie un tableau d'objets ( Object[]). Si vous devez convertir une liste en un tableau d'objets d'un certain type, vous pouvez transmettre un tableau dans lequel les éléments des listes seront déplacés en tant que paramètre de la méthode.

    Exemple:

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

    Conclusion:

    
    Amigo
    Amigo
    Hello
    Hello
Les méthodes ArrayList en Java sont apprises dans le cours JavaRush. La première connaissance a lieu au septième niveau de la quête Java Syntax, lors de la conférence « ArrayList Class » . Au même niveau, il existe des collections de tâches - un et deux dans lesquelles vous devez utiliser les méthodes ArrayList, des exemples supplémentaires de travail avec ArrayList et des génériques sont donnés et la différence entre ArrayList et LinkedList est expliquée. Il s'agit d'un vaste sujet d'étude, c'est pourquoi, sous une forme ou une autre, Arraylist en Java (les méthodes de cette classe ne sont qu'une partie de l'ensemble des connaissances qui méritent d'être approfondies) est revenu dans le cours aux niveaux suivants de formation - Core, Collections, Multithreading. Nous pensons que la pratique quotidienne de l’écriture de code est la principale clé du succès en programmation. Par conséquent, 80 % de JavaRush se compose de tâches pratiques, de mini-projets et de tâches de jeu. Tout cela représente des centaines d’heures de codage qui vous aideront à améliorer vos compétences.

Liens pour des lectures complémentaires

  1. Un article détaillé sur les tableaux dynamiques , ou plus précisément sur ArrayListet LinkedList, qui remplissent leur rôle dans le langage Java.
  2. Un article sur la suppression d'éléments d'un ArrayList .
  3. Conférence sur l'utilisation d'ArrayList dans des diagrammes et des images .
Commentaires
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION