JavaRush /Java блогы /Random-KK /Java тіліндегі ArrayList

Java тіліндегі ArrayList

Топта жарияланған
Әзірлеу кезінде жиі қандай өлшемді массивтер қажет болатынын болжау қиын. Сондықтан бағдарлама жұмыс істеп тұрған кезде жадты динамикалық түрде бөлу функциясы әрбір бағдарламалау тіліне қажет. Динамикалық массив - бұл бағдарламаның орындалу барысында өлшемі өзгеруі мүмкін массив. Java тілінде осы мақсат үшін ArrayList класы бар .

ArrayList класы дегеніміз не?

ArrayList — java.utils бумасында орналасқан тізімге (немесе динамикалық массивке) жауап беретін Коллекциялық құрылымның бөлігі, Тізім интерфейсінің өзгермелі жиым жүзеге асыруы. Бұл сынып барлық қосымша тізім әрекеттерін жүзеге асырады және тізімді сақтау үшін пайдаланылатын массив өлшемін басқару әдістерін қамтамасыз етеді. ArrayList динамикалық массив идеясына негізделген. Атап айтқанда, қажетінше көбейту немесе азайту кезінде элементтерді қосу және жою мүмкіндігі.

ArrayList нені сақтайды?

Тек сілтеме түрлері, кез келген нысандар, соның ішінде үшінші тарап сыныптары. Жолдар, шығыс ағындары, басқа жинақтар. Қаптама кластары қарапайым деректер түрлерін сақтау үшін пайдаланылады.

ArrayList конструкторлары

  1. ArrayList()

    Бастапқы ішкі массив сыйымдылығы = 10 бос конструктор.

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

    Сақталған мәндердің түрін бұрыштық жақшаларда көрсеткен жөн. Жоғарыдағы мысалда - String.

  2. ArrayList(Cолекция <? кеңейтеді E> c)

    Конструктор басқа жинақты қабылдайды, өткен жиынның элементтері бар жаңа массив жасайды:

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

    Жаңа тізімдегі элементтердің реті түпнұсқамен бірдей болады.

  3. ArrayList(int initialCapacity)

    Конструктор параметрі ішкі массивтің бастапқы өлшемінің мәні болып табылады.

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

    Жаңа элементтер қосылған кезде негізгі ArrayList бос орын бітсе, жаңа үлкенірек массив жасалады және деректер оған көшіріледі. Егер codeты жазу кезінде массивте элементтердің көп саны өңделетінін алдын ала білсеңіз, оңтайландыру мақсатында үлкенірек мәнді көрсетуіңіз керек.

ArrayList әдістері

    Төменде ArrayList негізгі әдістері берілген.

  • қосу(E e)

    Тізімнің соңына жаңа элемент қосады. -мәнді қайтарады boolean( шын - сәтті, жалған - қосылмаған):

    ArrayList<String> list = new ArrayList<>();
    list.add("Hello");
  • қосу(int индексі, E элементі)

    elementПозиция индексіне элемент қосады . Қосу кезінде көрсетілген индекстің оң жағындағы барлық элементтер 1 позицияға оңға жылжытылады:

    list.add(0, "Amigo");

    Элементті тізімнің кез келген жеріне кірістіру қажет болғанда өте пайдалы, бірақ ArrayList басында және ортасында жиі кірістіру әрекеттері үшін өте жақсы таңдау болмауы мүмкін - LinkedList-ті қарау керек.

  • addAll(<? коллекциясы E> жинағын кеңейтеді)

    Жинақтың барлық элементтерін тізімге жинақта пайда болатын ретпен қосады.

  • addAll(int индексі, Collection <? E> жиынын кеңейтеді)

    Добавление всех элементов 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 тіліндегі ArrayList әдістері JavaRush курсында үйренеді. Алғашқы танысу Java синтаксисі квестінің жетінші деңгейінде, «ArrayList Class» лекциясында өтеді . Бір деңгейде тапсырмалар жинақтары бар - бір және екі , онда ArrayList әдістерін қолдану қажет, ArrayList және генериктермен жұмыс істеудің қосымша мысалдары келтірілген және ArrayList және LinkedList арасындағы айырмашылық түсіндіріледі. Бұл зерттеудің ауқымды тақырыбы, сондықтан Java тіліндегі Arraylist (бұл сыныптың әдістері зерттелуге тұрарлық барлық білімдер жиынтығының бір бөлігі ғана) келесі деңгейлерде курсқа қайтарылады. оқытудың - Core, Collections, Multithreading. Біз codeты жазудың күнделікті тәжірибесі бағдарламалаудағы табыстың негізгі кілті деп санаймыз. Сондықтан JavaRush 80% практикалық тапсырмалардан, шағын жобалардан және ойын тапсырмаларынан тұрады. Мұның бәрі сіздің дағдыларыңызды жақсартуға көмектесетін жүздеген сағаттық codeтау.

Қосымша оқуға арналған сілтемелер

  1. Java тілінде өз рөлін атқаратын динамикалық массивтер , дәлірек айтқанда ArrayListжәне туралы егжей-тегжейлі мақала.LinkedList
  2. ArrayList тізімінен элементтерді жою туралы мақала .
  3. Диаграммалар мен суреттерде ArrayList-пен жұмыс істеу бойынша дәріс .
Пікірлер
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION