JavaRush /Blog Java /Random-ES /Lista de matrices en Java

Lista de matrices en Java

Publicado en el grupo Random-ES
Durante el desarrollo, a menudo es difícil predecir qué tamaño de matrices se necesitarán. Por lo tanto, la función de asignar memoria dinámicamente mientras el programa se ejecuta es necesaria para todos los lenguajes de programación. Una matriz dinámica es aquella cuyo tamaño puede cambiar durante la ejecución del programa. En Java existe una clase ArrayList para este propósito .

¿Qué es la clase ArrayList?

ArrayList es una implementación de matriz mutable de la interfaz List, parte de Collection Framework, que es responsable de la lista (o matriz dinámica) ubicada en el paquete java.utils. Esta clase implementa todas las operaciones de lista opcionales y proporciona métodos para controlar el tamaño de la matriz que se utiliza para almacenar la lista. ArrayList se basa en la idea de una matriz dinámica. Es decir, la capacidad de agregar y eliminar elementos, mientras se aumentan o disminuyen según sea necesario.

¿Qué almacena ArrayList?

Solo tipos de referencia, cualquier objeto, incluidas clases de terceros. Cadenas, flujos de salida, otras colecciones. Las clases contenedoras se utilizan para almacenar tipos de datos primitivos.

Constructores ArrayList

  1. Lista de arreglo()

    Constructor vacío con capacidad de matriz interna inicial = 10.

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

    Es recomendable indicar entre paréntesis angulares el tipo de valores almacenados. En el ejemplo anterior - String.

  2. ArrayList(Colección <? extiende E> c)

    El constructor acepta otra colección, creando una nueva matriz con los elementos de la colección pasada:

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

    El orden de los elementos en la nueva lista será el mismo que el original.

  3. ArrayList(int capacidadinicial)

    El parámetro del constructor es el valor del tamaño inicial de la matriz interna.

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

    Si el ArrayList subyacente se queda sin espacio cuando se agregan nuevos elementos, se crea una nueva matriz más grande y los datos se copian en ella. Si sabe de antemano al escribir su código que se procesará una gran cantidad de elementos en la matriz, debe especificar un valor mayor para fines de optimización.

Métodos de lista de matrices

    A continuación se muestran los métodos principales de ArrayList.

  • agregar(E e)

    Agrega un nuevo elemento al final de la lista. Devuelve boolean-valor ( verdadero - exitoso, falso - no agregado):

    ArrayList<String> list = new ArrayList<>();
    list.add("Hello");
  • agregar (índice int, elemento E)

    Agrega un elemento elementen la posición índice. Al agregar, todos los elementos a la derecha del índice especificado se desplazan 1 posición hacia la derecha:

    list.add(0, "Amigo");

    Muy útil cuando necesita insertar un elemento en cualquier lugar de una lista, pero para operaciones de inserción frecuentes al principio y en el medio de ArrayList puede no ser una muy buena opción; debe buscar en LinkedList.

  • addAll(Colección <? extiende la colección E>)

    Agrega todos los elementos de la colección a una lista en el orden en que aparecen en la colección.

  • addAll(int index, Colección <? extiende la colección E>)

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

    ArrayList<String> secondList = new ArrayList<>();
    secondList.addAll(list);
    System.out.println("Primera adición:" + secondList);
    secondList.addAll(1, list);
    System.out.println("Segunda adición en el medio:" + secondList);

    Вывод:

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

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

  • clear()

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

  • clone()

    devoluciones un objeto-копию массива:

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

    Вывод:

    
    [Amigo, Amigo, Hello, Hello]

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

    При клонировании создается новый независимый un objeto. В примере показано, Cómo очищение клонированного un objetoа не сказалось на составе его клона.

  • contains(Object o)

    Проверка наличие un objetoа в списке, возвращает boolean-significado.

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

    Вывод:

    
    true
    false
  • ensureCapacity(int minCapacity)

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

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

  • forEach(Consumer<? super E> action)

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

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

    В классе ArrayList есть метод для обработки каждого elemento, который называется также, 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() будет выполнен для каждого elemento.

  • get(int index)

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

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

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

  • indexOf(Object o)

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

  • isEmpty()

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

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

  • iterator()

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

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

  • lastIndexOf(Object o)

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

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

  • remove(int index)

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

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

  • remove(Object o)

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

  • removeAll(Collection<?> c)

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

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

  • set(int index, E element)

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

  • size()

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

  • sort(Comparator<? super E> c)

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

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

  • toArray()

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

    Пример:

    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
Los métodos ArrayList en Java se aprenden en el curso JavaRush. El primer contacto tiene lugar en el séptimo nivel de la misión de sintaxis de Java, en la conferencia "Clase ArrayList" . En el mismo nivel hay colecciones de tareas: uno y dos , en las que necesita usar métodos ArrayList, se dan ejemplos adicionales de cómo trabajar con ArrayList y genéricos, y se explica la diferencia entre ArrayList y LinkedList. Este es un tema de estudio extenso, por lo tanto, de una forma u otra, Arraylist en Java (los métodos de esta clase son solo una parte de todo el cuerpo de conocimientos en el que vale la pena profundizar) se retoma en el curso en los siguientes niveles. de formación: Núcleo, Colecciones, Multihilo. Creemos que la práctica diaria de escribir código es la clave principal del éxito en la programación. Por lo tanto, el 80% de JavaRush consta de tareas prácticas, miniproyectos y tareas de juegos. Todo esto son cientos de horas de codificación que te ayudarán a mejorar tu habilidad.

Enlaces para lectura adicional

  1. Un artículo detallado sobre matrices dinámicas , o más precisamente sobre ArrayListy LinkedList, que desempeñan su función en el lenguaje Java.
  2. Un artículo sobre cómo eliminar elementos de un ArrayList .
  3. Conferencia sobre cómo trabajar con ArrayList en diagramas e imágenes .
Comentarios
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION