JavaRush /وبلاگ جاوا /Random-FA /ArrayList در جاوا

ArrayList در جاوا

در گروه منتشر شد
هنگام توسعه، اغلب پیش‌بینی اینکه به چه اندازه آرایه‌ها نیاز است، دشوار است. بنابراین، عملکرد تخصیص پویا حافظه در حین اجرای برنامه برای هر زبان برنامه نویسی ضروری است. آرایه پویا آرایه ای است که اندازه آن در طول اجرای برنامه می تواند تغییر کند. در جاوا یک کلاس ArrayList برای این منظور وجود دارد .

کلاس ArrayList چیست؟

ArrayList یک آرایه قابل تغییر پیاده سازی از رابط List، بخشی از مجموعه Framework است که مسئول لیست (یا آرایه پویا) واقع در بسته java.utils است. این کلاس تمام عملیات لیست اختیاری را پیاده سازی می کند و روش هایی را برای کنترل اندازه آرایه ای که برای ذخیره لیست استفاده می شود ارائه می دهد. ArrayList بر اساس ایده یک آرایه پویا است. یعنی امکان افزودن و حذف عناصر، در عین حال افزایش یا کاهش در صورت نیاز.

ArrayList چه چیزی را ذخیره می کند؟

فقط انواع مرجع، هر شی، از جمله کلاس های شخص ثالث. رشته ها، جریان های خروجی، مجموعه های دیگر. کلاس های Wrapper برای ذخیره انواع داده های اولیه استفاده می شود.

سازندگان ArrayList

  1. ArrayList()

    سازنده خالی با ظرفیت آرایه داخلی اولیه = 10.

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

    توصیه می شود نوع مقادیر ذخیره شده را در براکت های زاویه ای نشان دهید. در مثال بالا - String.

  2. ArrayList (مجموعه <? گسترش E> c)

    سازنده مجموعه دیگری را می پذیرد و یک آرایه جدید با عناصر مجموعه ارسال شده ایجاد می کند:

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

    ترتیب عناصر در لیست جدید مانند اصلی خواهد بود.

  3. ArrayList (ظرفیت اولیه int)

    پارامتر سازنده مقدار اندازه اولیه آرایه داخلی است.

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

    اگر با اضافه شدن عناصر جدید فضای ArrayList زیربنایی تمام شود، یک آرایه بزرگتر جدید ایجاد می شود و داده ها در آن کپی می شوند. اگر از قبل هنگام نوشتن کد خود می دانید که تعداد زیادی از عناصر در آرایه پردازش می شوند، باید مقدار بیشتری را برای اهداف بهینه سازی مشخص کنید.

روش های 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 index, Collection <? Expands 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
روش های ArrayList در جاوا در دوره JavaRush آموخته می شوند. اولین آشنایی در سطح هفتم جستجوی نحوی جاوا، در سخنرانی "کلاس ArrayList" انجام می شود . در همان سطح مجموعه ای از وظایف - یک و دو وجود دارد که در آنها باید از روش های ArrayList استفاده کنید، نمونه های اضافی از کار با ArrayList و ژنریک آورده شده است و تفاوت بین ArrayList و LinkedList توضیح داده شده است. این یک موضوع مطالعه گسترده است، بنابراین، به یک شکل، Arraylist در جاوا (روش های این کلاس تنها بخشی از کل دانش است که ارزش جستجو در آن را دارد) در دوره در سطوح زیر بازگردانده می شود. آموزش - هسته، مجموعه ها، چند رشته ای. ما معتقدیم تمرین روزانه کدنویسی کلید اصلی موفقیت در برنامه نویسی است. بنابراین، 80٪ از JavaRush شامل وظایف عملی، پروژه های کوچک و وظایف بازی است. همه اینها صدها ساعت کدنویسی است که به بهبود مهارت شما کمک می کند.

لینک هایی برای مطالعه بیشتر

  1. مقاله ای مفصل در مورد آرایه های پویا یا به طور دقیق تر درباره ArrayListو LinkedListکه نقش خود را در زبان جاوا انجام می دهند.
  2. مقاله ای در مورد حذف عناصر از ArrayList .
  3. سخنرانی در مورد کار با ArrayList در نمودارها و تصاویر .
نظرات
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION