JavaRush /Блоги Java /Random-TG /ArrayList дар Java

ArrayList дар Java

Дар гурӯҳ нашр шудааст
Ҳангоми таҳия, пешгӯӣ кардан душвор аст, ки чӣ гуна массивҳои андоза лозиманд. Аз ин рӯ, функсияи ба таври динамикӣ тақсим кардани хотира ҳангоми иҷро кардани барнома барои ҳар як забони барномасозӣ зарур аст. Массиви динамикӣ массиви динамикӣ мебошад, ки андозаи он ҳангоми иҷрои барнома метавонад тағир ёбад. Дар Java синфи ArrayList барои ин мақсад мавҷуд аст .

Синфи ArrayList чист?

ArrayList амалисозии массиви тағйирёбандаи интерфейси Рӯйхат мебошад, ки қисми чаҳорчӯбаи Коллексия мебошад, ки барои рӯйхат (ё массиви динамикӣ) дар бастаи java.utils ҷойгир аст. Ин синф ҳамаи амалиёти ихтиёрии рӯйхатро амалӣ мекунад ва усулҳои назорати андозаи массивро, ки барои нигоҳ доштани рӯйхат истифода мешавад, таъмин мекунад. ArrayList ба идеяи массиви динамикӣ асос ёфтааст. Маҳз, қобorяти илова кардан ва хориҷ кардани унсурҳо ҳангоми зарурат афзоиш ё кам кардан.

ArrayList чиро нигоҳ медорад?

Танҳо намудҳои истинод, ҳама гуна an objectҳо, аз ҷумла синфҳои тарафи сеюм. Сатрҳо, ҷараёнҳои баромад, коллексияҳои дигар. Синфҳои Wrapper барои нигоҳ доштани намудҳои ибтидоии додаҳо истифода мешаванд.

Конструкторҳои ArrayList

  1. ArrayList()

    Созандаи холӣ бо иқтидори массиви дохorи ибтидоӣ = 10.

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

    Тавсия дода мешавад, ки намуди арзишҳои захирашударо дар қавсҳои кунҷӣ нишон диҳед. Дар мисоли боло - String.

  2. ArrayList(Маҷмӯа <? E-ро васеъ мекунад c)

    Конструктор коллексияи дигарро қабул карда, массиви навро бо унсурҳои коллексияи гузаронидашуда эҷод мекунад:

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

    Тартиби элементҳо дар рӯйхати нав ҳамон тавре ки аслӣ хоҳад буд.

  3. ArrayList (int initialCapacity)

    Параметри созанда арзиши андозаи ибтидоии массиви дохилӣ мебошад.

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

    Агар ҳангоми илова кардани унсурҳои нав дар ArrayList-и асосӣ ҷой тамом нашавад, массиви нави калонтар сохта мешавад ва маълумот ба он нусхабардорӣ карда мешавад. Агар шумо ҳангоми навиштани codeи худ пешакӣ донед, ки шумораи зиёди элементҳо дар массив коркард мешаванд, шумо бояд барои мақсадҳои оптимизатсия арзиши калонтарро муайян кунед.

Усулҳои ArrayList

    Дар зер усулҳои асосии ArrayList оварда шудаанд.

  • илова кардан (Д д)

    Ба охири рӯйхат элементи нав илова мекунад. Бармегардонад boolean- арзиш ( ҳақиқӣ - муваффақият, бардурӯғ - илова карда нашудааст):

    ArrayList<String> list = new ArrayList<>();
    list.add("Hello");
  • илова (index int, элементи E)

    elementДар индекси мавқеъ элемент илова мекунад . Ҳангоми илова кардан, ҳамаи элементҳо дар тарафи рости индекси муайяншуда 1 мавқеъ ба рост кӯчонида мешаванд:

    list.add(0, "Amigo");

    Очень полезен, когда нужно вставить элемент в произвольное место списка, однако для частых операций вставки в начало и середину ArrayList может оказаться не очень удачным выбором — следует изучить LinkedList.

  • addAll(Collection <? extends E> collection)

    Добавление всех элементов коллекции collection в список в порядке их расположения в collection.

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

    Добавление всех элементов collection в список начиная с индекса index. При этом все элементы сдвинутся вправо на количество элементов в списке 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);

    Вывод:

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

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

  • clear()

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

  • clone()

    returns an object-копию массива:

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

    Вывод:

    
    [Amigo, Amigo, Hello, Hello]

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

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

  • contains(Object 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. В результате метод возвращает элемент, который был удален.

  • 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().

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

  • toArray()

    Рӯйхатро ба массиви собит табдил медиҳад. Дар хотир доред, ки усул массиви an objectҳоро бармегардонад ( Object[]). Агар ба шумо лозим ояд, ки рӯйхатро ба массиви an objectҳои навъи муайян табдил диҳед, шумо метавонед массиверо гузаронед, ки ба он элементҳои рӯйхат ҳамчун параметр ба метод интиқол дода мешаванд.

    Мисол:

    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 дар Java дар курси JavaRush омӯхта мешаванд. Аввалин шиносоӣ дар сатҳи ҳафтуми квести Java Syntax, дар лексияи “ArrayList Class” сурат мегирад . Дар як сатҳ маҷмӯаҳои вазифаҳо мавҷуданд - як ва ду , ки дар онҳо шумо бояд усулҳои ArrayList-ро истифода баред, мисолҳои иловагии кор бо ArrayList ва генерикҳо оварда шудаанд ва фарқияти байни ArrayList ва LinkedList шарҳ дода мешавад. Ин як мавзӯи васеи омӯзиш аст, аз ин рӯ, дар ин ё он шакл, Arraylist дар Java (усулҳои ин синф танҳо як қисми тамоми маҷмӯи донишест, ки ба он сазоворанд) дар курс дар сатҳҳои зерин баргардонида мешаванд. аз омӯзиш - Core, Коллексияҳо, Multithreading. Мо боварӣ дорем, ки таҷрибаи ҳаррӯзаи навиштани code калиди асосии муваффақият дар барномасозӣ мебошад. Аз ин рӯ, 80% JavaRush аз вазифаҳои амалӣ, мини-лоиҳаҳо ва вазифаҳои бозӣ иборат аст. Ҳамаи ин садҳо соат рамзгузорӣ аст, ки ба такмor маҳорати шумо кӯмак мекунад.

Истинодҳо барои хондани минбаъда

  1. Мақолаи муфассал дар бораи массивҳои динамикӣ ё дақиқтараш дар бораи ArrayListва LinkedList, ки нақши худро дар забони Java иҷро мекунанд.
  2. Мақола дар бораи нест кардани элементҳо аз ArrayList .
  3. Лексия оид ба кор бо ArrayList дар диаграммаҳо ва расмҳо .
Шарҳҳо
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION