JavaRush /Java Blogu /Random-AZ /Java-da ArrayList

Java-da ArrayList

Qrupda dərc edilmişdir
İnkişaf edərkən, hansı ölçülü massivlərə ehtiyac olacağını təxmin etmək çox vaxt çətindir. Buna görə də, proqram işləyərkən yaddaşın dinamik şəkildə bölüşdürülməsi funksiyası hər bir proqramlaşdırma dili üçün zəruridir. Dinamik massiv proqramın icrası zamanı ölçüsü dəyişə bilən massivdir. Java-da bunun üçün ArrayList sinfi var .

ArrayList sinfi nədir?

ArrayList, java.utils paketində yerləşən siyahı (və ya dinamik massiv) üçün cavabdeh olan Kolleksiya Çərçivəsinin bir hissəsi olan Siyahı interfeysinin dəyişkən massiv tətbiqidir. Bu sinif bütün isteğe bağlı siyahı əməliyyatlarını həyata keçirir və siyahının saxlanması üçün istifadə olunan massivin ölçüsünü idarə etmək üsullarını təmin edir. ArrayList dinamik massiv ideyasına əsaslanır. Məhz, elementləri əlavə etmək və silmək, lazım olduqda artırma və ya azaltma imkanı.

ArrayList nə saxlayır?

Yalnız istinad növləri, üçüncü tərəf sinifləri daxil olmaqla istənilən obyektlər. Sətirlər, çıxış axınları, digər kolleksiyalar. Sarmalayıcı sinifləri primitiv məlumat növlərini saxlamaq üçün istifadə olunur.

ArrayList Konstruktorları

  1. ArrayList()

    İlkin daxili massiv tutumu = 10 olan boş konstruktor.

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

    Saxlanılan dəyərlərin növünü bucaqlı mötərizədə göstərmək məsləhətdir. Yuxarıdakı nümunədə - String.

  2. ArrayList(Kolleksiya <? E> genişləndirir c)

    Konstruktor başqa bir kolleksiya qəbul edir, ötürülən kolleksiyanın elementləri ilə yeni massiv yaradır:

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

    Yeni siyahıdakı elementlərin sırası orijinalla eyni olacaq.

  3. ArrayList (int başlanğıc tutumu)

    Konstruktor parametri daxili massivin ilkin ölçüsünün qiymətidir.

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

    Yeni elementlər əlavə olunduqda əsas ArrayList-də yer tükənirsə, yeni daha böyük massiv yaradılır və məlumatlar ona kopyalanır. Əgər siz kodunuzu yazarkən massivdə çoxlu sayda elementin işlənəcəyini əvvəlcədən bilirsinizsə, optimallaşdırma məqsədləri üçün daha böyük dəyər göstərməlisiniz.

ArrayList Metodları

    Aşağıda ArrayList-in əsas üsulları verilmişdir.

  • əlavə et(E e)

    Siyahının sonuna yeni element əlavə edir. -dəyəri qaytarır boolean( doğru - uğur, yalan - əlavə olunmayıb):

    ArrayList<String> list = new ArrayList<>();
    list.add("Hello");
  • əlavə et (int indeksi, E elementi)

    elementMövqe indeksinə element əlavə edir . Əlavə edərkən, göstərilən indeksin sağındakı bütün elementlər 1 mövqe sağa sürüşdürülür:

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

    Siyahını sabit massivə çevirir. Qeyd edək ki, metod bir sıra obyektləri qaytarır ( Object[]). Siyahını müəyyən tipli obyektlər massivinə çevirmək lazımdırsa, siyahıların elementlərinin metoda parametr kimi köçürüləcəyi massivi ötürə bilərsiniz.

    Misal:

    String[] array = new String[secondList.size()];
    secondList.toArray(array);
    for(int i = 0; i< array.length; i++) {
       System.out.println(array[i]);
    }

    Nəticə:

    
    Amigo
    Amigo
    Hello
    Hello
Java-da ArrayList metodları JavaRush kursunda öyrənilir. İlk tanışlıq Java Syntax axtarışının yeddinci səviyyəsində, “ArrayList Class” mühaziəsində baş verir . Eyni səviyyədə tapşırıqlar toplusu var - biriki , burada ArrayList metodlarından istifadə etməlisiniz, ArrayList və generiklərlə işləmək üçün əlavə nümunələr verilir və ArrayList ilə LinkedList arasındakı fərq izah olunur. Bu, geniş bir araşdırma mövzusudur, buna görə də, bu və ya digər formada Java-da Arraylist (bu sinfin metodları araşdırmağa dəyər olan bütün biliklərin yalnız bir hissəsidir) aşağıdakı səviyyələrdə kursda geri qaytarılır. təlimin - Core, Collections, Multithreading. Biz hesab edirik ki, gündəlik kod yazmaq təcrübəsi proqramlaşdırmada uğurun əsas açarıdır. Buna görə də JavaRush-un 80%-i praktik tapşırıqlar, mini-layihələr və oyun tapşırıqlarından ibarətdir. Bütün bunlar bacarıqlarınızı artırmağa kömək edəcək yüzlərlə saat kodlaşdırmadır.

Əlavə oxumaq üçün bağlantılar

  1. Java dilində öz rolunu yerinə yetirən dinamik massivlər , daha doğrusu ArrayListvə haqqında ətraflı məqalə.LinkedList
  2. ArrayList-dən elementlərin çıxarılması haqqında məqalə .
  3. Diaqram və şəkillərdə ArrayList ilə işləmək haqqında mühazirə .
Şərhlər
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION