Apa kelas ArrayList?
ArrayList punika implementasine Uploaded mutable antarmuka Dhaftar, bagéan saka Framework Koleksi, kang tanggung jawab kanggo dhaftar (utawa Uploaded dinamis) dumunung ing paket java.utils. Kelas iki ngetrapake kabeh operasi dhaptar opsional lan menehi cara kanggo ngontrol ukuran array sing digunakake kanggo nyimpen dhaptar. ArrayList adhedhasar ide array dinamis. Yaiku, kemampuan kanggo nambah lan mbusak unsur, nalika nambah utawa nyuda yen perlu.Apa sing disimpen ArrayList?
Mung jinis referensi, obyek apa wae, kalebu kelas pihak katelu. Strings, output stream, koleksi liyane. Kelas Wrapper digunakake kanggo nyimpen jinis data primitif.ArrayList Konstruktor
-
ArrayList()
Konstruktor kosong kanthi kapasitas array internal awal = 10.
ArrayList<String> list = new ArrayList<>();
Disaranake kanggo nuduhake jinis nilai sing disimpen ing kurung sudut. Ing conto ing ndhuwur -
String
. -
ArrayList(Koleksi <? ngluwihi E> c)
Konstruktor nampa koleksi liyane, nggawe array anyar karo unsur koleksi liwati:
ArrayList<String> list2 = new ArrayList<>(list);
Urutan unsur ing dhaptar anyar bakal padha karo asline.
-
ArrayList(int initialCapacity)
Parameter konstruktor yaiku nilai ukuran awal array internal.
ArrayList<String> list2 = new ArrayList<>(10000);
Yen ArrayList ndasari kehabisan spasi nalika unsur anyar ditambahake, array sing luwih gedhe bakal digawe lan data disalin menyang. Yen sampeyan ngerti luwih dhisik nalika nulis kode manawa akeh unsur bakal diproses ing array, sampeyan kudu nemtokake nilai sing luwih gedhe kanggo tujuan optimasi.
Metode ArrayList
-
tambah (e)
Nambah unsur anyar ing mburi dhaftar. Ngasilake
boolean
-value ( bener - sukses, salah - ora ditambahake):ArrayList<String> list = new ArrayList<>(); list.add("Hello");
-
add(int index, elemen E)
Nambahake unsur
element
ing indeks posisi. Nalika nambah, kabeh unsur ing sisih tengen indeks sing ditemtokake dipindhah 1 posisi ing sisih tengen:list.add(0, "Amigo");
Migunani banget yen sampeyan kudu nglebokake unsur ing ngendi wae ing dhaptar, nanging kanggo operasi selipan sing kerep ing wiwitan lan tengah ArrayList bisa uga ora dadi pilihan sing apik - sampeyan kudu ndeleng LinkedList.
-
addAll(Koleksi <? ngluwihi E> koleksi)
Nambahake kabeh unsur koleksi menyang dhaptar kanthi urutan sing katon ing koleksi.
-
addAll(int index, Koleksi <? ngluwihi E> koleksi)
Nambahake kabeh unsur
collection
menyang dhaptar wiwit saka indeksindex
. Ing kasus iki, kabeh unsur bakal pindhah menyang tengen kanthi jumlah unsur ing dhaptarcollection
: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);
Kesimpulan:
Первое добавление: [Amigo, Hello] Второе добавление в середину: [Amigo, Amigo, Hello, Hello]
Cara kasebut
addAll()
uga ngasilake asil boolean saka nambah unsur. -
bening()
Mbusak kabeh unsur saka dhaptar.
- kloning()
Ngasilake obyek salinan saka array:
ArrayList<String> copyOfSecondList = (ArrayList<String>) secondList.clone(); secondList.clear(); System.out.println(copyOfSecondList);
Kesimpulan:
[Amigo, Amigo, Hello, Hello]
Wigati dimangerteni manawa metode kasebut
clone()
baliObject
, dadi sawise nelpon sampeyan kudu ngirim menyang kelas sing dibutuhake.При клонировании создается новый независимый 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
orindex >=
максимального количества элементов списка, будет выброшено исключение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 в указанной позиции индекса. После удаления сдвигает все элементы влево для заполнения освободившегося пространства.
Yen
index<0
utawa>=
nomer dhaptar unsur, pangecualian bakal dibuwangIndexOutOfBoundsException
. Akibaté, cara kasebut ngasilake unsur sing wis dibusak. -
mbusak (obyek o)
Cara mbusak unsur liwati saka dhaftar
o
. Yen ana unsur ing dhaptar, bakal dibusak lan kabeh unsur dipindhah menyang kiwa. Yen unsur kasebut ana ing dhaptar lan kasil dibusak, cara kasebut bakal bali bener; yen ora, false . -
removeAll(Koleksi<?> c)
Yen sampeyan kudu mbusak sawetara unsur, sampeyan ora kudu nindakake ing daur ulang kondisional: iku luwih trep lan luwih aman kanggo nggunakake cara
removeAll()
. Iku nampa koleksi unsur sing bakal dibusak saka dhaftar.Koleksi kasebut kudu ngemot unsur sing padha karo sing disimpen ing dhaptar target. Yen ora bakal dibuwang
ClassCastException
. Cara kasebut bakal bali bener yen dhaptar wis diowahi minangka asil saka telpon metode. -
set(int indeks, elemen E)
Ngganti unsur ing posisi sing ditemtokake
index
karo sing liwatielement
. Indeks kasebut uga kudu luwih gedhe tinimbang nol lan kurang saka indeks unsur pungkasan, yen ora, pangecualian bakal dibuwangIndexOutOfBoundsException
. -
ukuran ()
Cara paling apik (meh mung siji) kanggo ngerteni ukuran array.
-
sort(Komparator<? super E> c)
Ngurutake dhaptar miturut aturan tartamtu. Aturan Urut minangka antarmuka sing diimplementasikake
Comparator
kanthi metode sing diganticompareTo()
.Overriding perlu yen koleksi ngemot obyek saka kelas dhewe. Nalika nggarap kelas standar (
Integer
,String
lan liya-liyane), overridingcompareTo()
mung dibutuhake kanggo ngurutake non-standar. -
kanggoArray()
Ngonversi dhaptar menyang array tetep. Elinga yen cara ngasilake array obyek (
Tuladha:Object[]
). Yen sampeyan kudu ngowahi dhaptar dadi macem-macem obyek saka jinis tartamtu, sampeyan bisa ngliwati array sing unsur-unsur dhaptar bakal dipindhah minangka parameter kanggo metode kasebut.String[] array = new String[secondList.size()]; secondList.toArray(array); for(int i = 0; i< array.length; i++) { System.out.println(array[i]); }
Kesimpulan:
Amigo Amigo Hello Hello
Ing ngisor iki minangka cara utama ArrayList.
Link kanggo maca luwih
- Artikel rinci babagan array dinamis , utawa luwih tepat babagan
ArrayList
lanLinkedList
, sing nindakake peran ing basa Jawa. - Artikel babagan mbusak unsur saka ArrayList .
- Kuliah babagan nggarap ArrayList ing diagram lan gambar .
GO TO FULL VERSION