JavaRush /Java Blog /Random-TL /ArrayList sa Java

ArrayList sa Java

Nai-publish sa grupo
Kapag umuunlad, kadalasan ay mahirap hulaan kung anong laki ng mga arrays ang kakailanganin. Samakatuwid, ang function ng dynamic na paglalaan ng memorya habang tumatakbo ang programa ay kinakailangan para sa bawat programming language. Ang isang dynamic na array ay isa na ang laki ay maaaring magbago sa panahon ng pagpapatupad ng programa. Sa Java, mayroong isang klase ng ArrayList para sa layuning ito .

Ano ang klase ng ArrayList?

Ang ArrayList ay isang mutable array na pagpapatupad ng List interface, bahagi ng Collection Framework, na responsable para sa listahan (o dynamic array) na matatagpuan sa java.utils package. Ang klase na ito ay nagpapatupad ng lahat ng opsyonal na pagpapatakbo ng listahan at nagbibigay ng mga pamamaraan upang makontrol ang laki ng array na ginagamit upang iimbak ang listahan. Ang ArrayList ay batay sa ideya ng isang dynamic na array. Lalo na, ang kakayahang magdagdag at mag-alis ng mga elemento, habang tumataas o bumababa kung kinakailangan.

Ano ang iniimbak ng ArrayList?

Tanging mga uri ng sanggunian, anumang mga bagay, kabilang ang mga klase ng third-party. Mga string, output stream, iba pang mga koleksyon. Ginagamit ang mga klase ng wrapper upang mag-imbak ng mga primitive na uri ng data.

Mga Konstruktor ng ArrayList

  1. ArrayList()

    Walang laman na constructor na may paunang internal array capacity = 10.

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

    Maipapayo na ipahiwatig ang uri ng mga nakaimbak na halaga sa mga bracket ng anggulo. Sa halimbawa sa itaas - String.

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

    Ang constructor ay tumatanggap ng isa pang koleksyon, na lumilikha ng isang bagong array na may mga elemento ng naipasa na koleksyon:

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

    Ang pagkakasunud-sunod ng mga elemento sa bagong listahan ay magiging kapareho ng orihinal.

  3. ArrayList(int initialCapacity)

    Ang parameter ng constructor ay ang halaga ng paunang laki ng panloob na hanay.

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

    Kung ang pinagbabatayan na ArrayList ay maubusan ng espasyo kapag nagdagdag ng mga bagong elemento, isang bagong mas malaking array ang gagawin at ang data ay makokopya dito. Kung alam mo nang maaga kapag isinusulat ang iyong code na isang malaking bilang ng mga elemento ang ipoproseso sa array, dapat kang tumukoy ng mas malaking halaga para sa mga layunin ng pag-optimize.

Mga Paraan ng ArrayList

    Nasa ibaba ang mga pangunahing pamamaraan ng ArrayList.

  • magdagdag (E e)

    Nagdaragdag ng bagong elemento sa dulo ng listahan. Returns boolean-value ( true - success, false - not added):

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

    Nagdaragdag ng elemento elementsa index ng posisyon. Kapag nagdadagdag, lahat ng elemento sa kanan ng tinukoy na index ay inililipat ng 1 posisyon sa kanan:

    list.add(0, "Amigo");

    Napaka-kapaki-pakinabang kapag kailangan mong magpasok ng elemento kahit saan sa isang listahan, ngunit para sa madalas na pagpapatakbo ng pagpapasok sa simula at gitna ng ArrayList ay maaaring hindi isang napakahusay na pagpipilian - dapat mong tingnan ang LinkedList.

  • addAll(Collection <? extends E> collection)

    Idinaragdag ang lahat ng elemento ng koleksyon sa isang listahan sa pagkakasunud-sunod ng paglitaw ng mga ito sa koleksyon.

  • 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
Ang mga pamamaraan ng ArrayList sa Java ay natutunan sa kursong JavaRush. Ang unang kakilala ay nagaganap sa ikapitong antas ng Java Syntax quest, sa lecture na "ArrayList Class" . Sa parehong antas mayroong mga koleksyon ng mga gawain - isa at dalawa , kung saan kailangan mong gumamit ng mga pamamaraan ng ArrayList, ibinibigay ang mga karagdagang halimbawa ng pagtatrabaho sa ArrayList at mga generic, at ipinaliwanag ang pagkakaiba sa pagitan ng ArrayList at LinkedList. Ito ay isang malawak na paksa ng pag-aaral, samakatuwid, sa isang anyo o iba pa, ang Arraylist sa Java (ang mga pamamaraan ng klase na ito ay bahagi lamang ng buong katawan ng kaalaman na dapat pag-aralan) ay ibinalik sa kurso sa mga sumusunod na antas ng pagsasanay - Core, Collections, Multithreading. Naniniwala kami na ang pang-araw-araw na pagsasanay sa pagsulat ng code ay ang pangunahing susi sa tagumpay sa programming. Samakatuwid, 80% ng JavaRush ay binubuo ng mga praktikal na gawain, mini-proyekto, at mga gawain sa laro. Ang lahat ng ito ay daan-daang oras ng coding na makakatulong na mapabuti ang iyong kakayahan.

Mga link para sa karagdagang pagbabasa

  1. Isang detalyadong artikulo tungkol sa mga dynamic na array , o mas tiyak tungkol sa ArrayListat LinkedList, na gumaganap ng kanilang tungkulin sa wikang Java.
  2. Isang artikulo tungkol sa pag-alis ng mga elemento mula sa isang ArrayList .
  3. Lecture sa pagtatrabaho sa ArrayList sa mga diagram at larawan .
Mga komento
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION