JavaRush /Java блогу /Random-KY /Javaдагы ArrayList

Javaдагы ArrayList

Группада жарыяланган
Иштеп жатканда, көп учурда кандай өлчөмдөгү массивдер керек болорун алдын ала айтуу кыйын. Демек, программа иштеп жатканда эстутумду динамикалык бөлүштүрүү функциясы ар бир программалоо тor үчүн зарыл. Динамикалык массив - бул программанын аткарылышы учурунда өлчөмү өзгөрө турган массив. Javaда бул максат үчүн ArrayList классы бар .

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

ArrayList – Java.utils пакетинде жайгашкан тизмеге (же динамикалык массивге) жооптуу болгон Коллекция алHowтарынын бөлүгү болгон List интерфейсинин өзгөрүлмө массивинин ишке ашырылышы. Бул класс бардык кошумча тизме операцияларын ишке ашырат жана тизмени сактоо үчүн колдонулган массивдин өлчөмүн көзөмөлдөө ыкмаларын берет. ArrayList динамикалык массивдин идеясына негизделген. Тактап айтканда, элементтерди кошуу жана алып салуу, ал эми зарылчылыкка жараша көбөйтүү же азайтуу.

ArrayList эмнени сактайт?

Шилтеме түрлөрү гана, каалаган an objectилер, анын ичинде үчүнчү жактын класстары. Саптар, чыгаруу агымдары, башка коллекциялар. Wrapper класстары примитивдүү маалымат түрлөрүн сактоо үчүн колдонулат.

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

  1. ArrayList()

    Баштапкы ички массив сыйымдуулугу = 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тин негизги ыкмалары келтирилген.

  • кошуу(E e)

    Тизменин аягына жаңы элемент кошот. -маани кайтарат boolean( чындык - ийгorк, жалган - кошулган жок):

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

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

    list.add(0, "Amigo");

    Тизменин каалаган жерине элементти киргизүү керек болгондо абдан пайдалуу, бирок ArrayListтин башында жана ортосуна тез-тез киргизүү операциялары үчүн абдан жакшы тандоо болбой калышы мүмкүн - LinkedListти карап чыгышыңыз керек.

  • addAll(Жыйнак <? E> жыйнагын кеңейтет)

    Коллекциянын бардык элементтерин тизмеге жыйнакта пайда болгон тартипте кошот.

  • addAll(int индекс, Коллекция <? 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 (бул класстын методдору изилдеп чыгууга арзырлык бorмдердин бүтүндөй бөлүгүнүн бир бөлүгү гана) курста төмөнкү деңгээлдерде кайтарылат. окутуунун - Core, Collections, Multithreading. Биз күнүмдүк code жазуу практикасы программалоодогу ийгorктин негизги ачкычы деп эсептейбиз. Демек, JavaRush 80% практикалык тапшырмалардан, мини долбоорлордон жана оюн тапшырмаларынан турат. Мунун баары сиздин чеберчorгиңизди жакшыртууга жардам бере турган жүздөгөн сааттык codeдоо.

Андан ары окуу үчүн шилтемелер

  1. Java тorнде өз ролун аткарган динамикалык массивдер , тагыраак айтканда ArrayListжана жөнүндө кеңири макала.LinkedList
  2. ArrayListтен элементтерди алып салуу жөнүндө макала .
  3. Диаграммаларда жана сүрөттөрдө ArrayList менен иштөө боюнча лекция .
Комментарийлер
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION