JavaRush /Java Blog /Random-TK /Java-da ArrayList

Java-da ArrayList

Toparda çap edildi
Ösüp barýarka, haýsy ululykdaky massiwleriň gerek boljakdygyny öňünden aýtmak kyn. Şonuň üçin programma işleýän wagtynda ýady dinamiki paýlamak funksiýasy her bir programma dili üçin zerurdyr. Dinamiki massiw, programma ýerine ýetirilende ululygy üýtgäp biler. Java-da bu maksat bilen “ArrayList” synpy bar .

“ArrayList” synpy näme?

“ArrayList”, “java.utils” bukjasynda ýerleşýän sanaw (ýa-da dinamiki massiw) üçin jogapkär bolan “Toplama çarçuwasynyň” bölegi bolan “Sanaw” interfeýsiniň üýtgäp bilýän massiwidir. Bu synp ähli islege bagly sanaw amallaryny ýerine ýetirýär we sanawy saklamak üçin ulanylýan massiwiň ululygyna gözegçilik etmegiň usullaryny hödürleýär. “ArrayList” dinamiki massiw ideýasyna esaslanýar. .Agny, zerur bolanda köpelmek ýa-da azalmak bilen elementleri goşmak we aýyrmak ukyby.

ArrayList näme saklaýar?

Diňe salgylanma görnüşleri, islendik obýektler, şol sanda üçünji tarap synplary. Setirler, çykyş akymlary, beýleki ýygyndylar. Wrapper synplary başlangyç maglumatlaryň görnüşlerini saklamak üçin ulanylýar.

ArrayList konstruktorlary

  1. ArrayList ()

    Başlangyç içerki massiwli boş konstruktor = 10.

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

    Burç ýaýlarynda saklanylýan bahalaryň görnüşini görkezmek maslahat berilýär. Aboveokardaky mysalda - String.

  2. ArrayList (Toplama <? E> c uzadýar)

    Konstruktor geçen kolleksiýanyň elementleri bilen täze massiw döredip, başga bir kolleksiýany kabul edýär:

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

    Täze sanawdaky elementleriň tertibi asyl nusgasy bilen deň bolar.

  3. ArrayList (int initialCapacity)

    Konstruktor parametri içerki massiwiň başlangyç ululygynyň bahasydyr.

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

    Esasy elementler goşulanda esasy ArrayList boş bolsa, täze has uly massiw döredilýär we maglumatlar oňa göçürilýär. Koduňyzy ýazanyňyzda köp sanly elementiň massiwde gaýtadan işlenjekdigini öňünden bilýän bolsaňyz, optimizasiýa maksatlary üçin has uly baha görkezmeli.

ArrayList usullary

    Aşakda ArrayList-iň esasy usullary bar.

  • goş (E e)

    Sanawyň soňuna täze element goşýar. Yzyna boolean-bahasy ( dogry - üstünlik, ýalan - goşulmaýar):

    ArrayList<String> list = new ArrayList<>();
    list.add("Hello");
  • goş (int indeks, E element)

    elementPositionerleşiş indeksinde element goşýar . Goşulanda, görkezilen indeksiň sag tarapyndaky ähli elementler 1 pozisiýa saga geçirilýär:

    list.add(0, "Amigo");

    Sanawyň islendik ýerine bir element girizmeli bolanyňyzda gaty peýdaly, ýöne “ArrayList” -iň başynda we ortasynda ýygy-ýygydan goýmak amallary gaty gowy saýlaw bolup bilmez - “LinkedList” -e göz aýlamaly.

  • addAll (Toplama <? E> kolleksiýany giňeldýär)

    Collectionygyndynyň ähli elementlerini kolleksiýada görkezilen tertipde sanawa goşýar.

  • addAll (int indeks, ýygyndy <? E> kolleksiýany giňeldýär)

    Добавление всех элементов 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
Java-da ArrayList usullary JavaRush kursynda öwrenilýär. Ilkinji tanyşlyk Java Sintaksis gözleginiň ýedinji derejesinde, “ArrayList Class” leksiýasynda bolup geçýär . Şol bir derejede meseleleriň ýygyndysy bar - bir we ikisi , onda ArrayList usullaryny ulanmaly, ArrayList we generika bilen işlemegiň goşmaça mysallary berilýär we ArrayList bilen LinkedList arasyndaky tapawut düşündirilýär. Bu giňişleýin öwreniş mowzugy, şonuň üçin bir görnüşde ýa-da başga bir görnüşde, Java-daky Arraylist (bu synpyň usullary, öwrenmäge mynasyp bolan bilimleriň diňe bir bölegidir) aşakdaky derejelerde yzyna gaýtarylýar. okuw - Esasy, ýygyndylar, köp okamak. Kod ýazmak boýunça gündelik tejribe programmirlemekde üstünlik gazanmagyň esasy açarydyr diýip hasaplaýarys. Şonuň üçin JavaRush-yň 80% amaly meselelerden, kiçi taslamalardan we oýun meselelerinden durýar. Bularyň hemmesi, başarnygyňyzy ýokarlandyrmaga kömek etjek ýüzlerçe sagat kodlamakdyr.

Goşmaça okamak üçin baglanyşyklar

  1. Dinamiki massiwler , has takygy ArrayListwe LinkedListJava dilinde öz rollaryny ýerine ýetirýän jikme-jik makala.
  2. ArrayList-den elementleri aýyrmak barada makala .
  3. ArrayList bilen diagrammalarda we suratlarda işlemek boýunça leksiýa .
Teswirler
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION