JavaRush /Blog Jawa /Random-JV /Array Dinamis ing Jawa

Array Dinamis ing Jawa

Diterbitake ing grup
Nalika nggawe program kanthi tingkat kerumitan sing beda-beda, saben pangembang nggunakake akeh jinis data, kalebu array. Struktur iki uga cocog kanggo nyimpen pesawat saka siji jinis, menehi kinerja gedhe, lan umume trep. Array Dinamis ing Jawa - 1Kerugian sing signifikan saka array yaiku statis: ukurane kudu ditemtokake sadurunge. Nanging, programer durung ngerti carane prédhiksi masa depan (kajaba, mesthi, AI katon bakal ngolah informasi kanthi cepet lan bisa prédhiksi acara apa wae). Mulane, kita nggawe struktur sing bisa ngganti ukuran nalika program lagi mlaku. Iki diarani array dinamis .

Array dinamis ing kursus JavaRush

Topik iki dibahas kanthi cetha lan cetha ing level 7 lan sebagian ing level 8 kursus JavaRush ing pencarian Java Syntax. Sajrone pirang-pirang kuliah lan 18 masalah, masalah utama dijaluk, jinis susunan dinamis lan bedane, kalebu kinerja. Topik iki penting banget, amarga susunan dinamis nyuda pangembang depresi, ngelu lan ngirit wektu sing luar biasa.

Apa array dinamis?

Array dinamis minangka array sing bisa ngganti ukurane sajrone eksekusi program. Ing Jawa, peran iki utamané dimainaké déning kelas ArrayList lan LinkedList. Ora kaya array, ArrayList lan LinkedList mung ngemot jinis data referensi, yaiku, mung bisa nyimpen obyek. Untunge, Jawa duwe mekanisme autoboxing lan autounboxing sing ngidini sampeyan nyimpen jinis primitif ing susunan dinamis. Kaya array statis, array dinamis iku homogen, yaiku, bisa nyimpen siji jinis data. Nanging, thanks kanggo mekanisme warisan lan nggunakake antarmuka sing tepat, sampeyan bisa nyimpen macem-macem kelas sing beda-beda ing siji array dinamis sing diwarisake saka siji umum, nanging luwih akeh ing ngisor iki. Tegese, array statis bisa kaya mangkene: Array Dinamis ing Jawa - 2Lan array dinamis ing Jawa bakal bisa kaya ing ngisor iki (nerusake diagram saka langkah katelu): Array Dinamis ing Jawa - 3Jawa nggunakake fungsi asli khusus kanggo nyalin array, supaya "pindhah" kuwi ora banget. larang.

Napa kita butuh array dinamis?

Array dinamis ing Jawa digunakake kanggo ngolah set data homogen sing ukurane ora dingerteni nalika program ditulis. Contone, sampeyan bisa uga pengin cache data saben klien sing lagi nggunakake aplikasi. Ora bisa prédhiksi jumlah klien kasebut sadurunge. Tanpa susunan dinamis, masalah iki bisa ditanggulangi kanthi pilihan ing ngisor iki:
  1. Nggawe array gedhe sing 100% kamungkinan kanggo nutupi kabutuhan;
  2. Nggawe array statis sing bakal dadi buffer;
  3. Gunakake struktur dinamis liyane, kayata set.
Opsi pisanan mung cocok kanggo sawetara sing winates. Ing kasus liyane, Uploaded kuwi bakal njupuk munggah jumlah gedhe saka papan memori, kang arang banget ora efisien. Kapindho mbutuhake implementasi mekanika tambahan kanggo ngresiki buffer, maca, lan liya-liyane. Katelu uga duwe kekurangan amarga beda fungsi.

Apa sing ditindakake array dinamis ing Jawa?

Ing basa Jawa, kelas ArrayList lan LinkedList tumindak minangka array dinamis. Sing paling umum digunakake yaiku ArrayList, amarga tumindak minangka array klasik, ora kaya LinkedList, sing ngetrapake konsep dhaptar sing disambung kaping pindho. Kita bakal ngomong babagan iki mengko.

ArrayList, LinkedList - konsep lan aturan operasi

ArrayList minangka array klasik sing bisa ditambahake sajrone eksekusi program. Iki adhedhasar array biasa: ukurane nalika digawe yaiku 10 unsur. Nalika ukuran mundhak, kapasitas mundhak. Aturan sing digunakake ArrayList:
  • Kaya array statis, diindeks saka 0;
  • Sisipan ing pungkasan lan akses kanthi indeks cepet banget - O(1);
  • Kanggo nglebokake unsur ing wiwitan utawa tengah, sampeyan kudu nyalin kabeh unsur siji sel ing sisih tengen, banjur nempelake unsur anyar ing posisi sing dibutuhake;
  • Akses miturut nilai gumantung saka jumlah unsur - O (n);
  • Boten kados array klasik, bisa nyimpen null;
Ing kasus LinkedList, kabeh luwih rumit: adhedhasar dhaptar sing disambung kaping pindho. Tegese, sacara struktural, array Jawa dinamis iki minangka sawetara obyek sing kasebar sing nuduhake siji liyane. Iku luwih gampang kanggo nerangake karo gambar. Ing LinkedList kita duwe obyek utama Head, sing nyimpen informasi babagan jumlah unsur, uga link menyang unsur pisanan lan pungkasan: Array Dinamis ing Jawa - 4Saiki lapangan size = 0, firstlan last = null. Saben unsur sing ditambahake menyang dhaptar iki minangka isi obyek internal sing kapisah. Ayo nambah unsur Johnny: Array Dinamis ing Jawa - 5Saiki kita duwe simpul kanthi nilai "Johnny". Kanggo unsur utama, pranala menyang unsur pisanan lan pungkasan nuding menyang simpul anyar. Objek iki uga nduweni pranala menyang unsur sadurunge lan sabanjure. Link menyang sadurunge bakal tansah null, awit iki unsur pisanan, lan pranala menyang sabanjuré bakal tansah null, amarga durung ana. Ayo ndandani iki: Array Dinamis ing Jawa - 6Nambahake unsur anyar kanthi nilai "Watson", sing dadi nomer loro. Wigati dimangerteni manawa unsur pisanan nduweni kolom nextsing nuding menyang unsur sabanjure, lan unsur anyar nduweni kolom previoussing nuding menyang sing sadurunge. Kanggo unsur utama, pranala menyang unsur pungkasan saiki nuding menyang simpul anyar. Diagram ing ngisor iki nuduhake carane nambah unsur ing tengah dhaftar: Array Dinamis ing Jawa - 7A unsur anyar "Hamish" wis ditambahake. Kanggo masang menyang tengah dhaftar, mung reassign pranala menyang unsur, minangka ditampilake ing tokoh. Ilustrasi kasebut nerangake proses dhaptar sing disambung kaping pindho ing tingkat paling dhuwur, tanpa rinci. Kanggo ngringkes crita babagan LinkedList, kita bisa njupuk sawetara aturan kanggo operasi:
  • Kaya array, diindeks saka 0;
  • Akses menyang unsur pisanan lan pungkasan ora gumantung ing nomer unsur - O (1);
  • Njupuk unsur kanthi indeks, nglebokake utawa mbusak saka tengah dhaptar gumantung saka jumlah unsur - O(n);
  • Sampeyan bisa nggunakake mekanisme iterator: banjur selipan lan pambusakan bakal kelakon ing wektu pancet;
  • Ora kaya array klasik, bisa nyimpen null.

Tuladha kode

Ayo dadi pindhah liwat sawetara conto. Potongan kode kalebu conto kanggo ArrayList lan LinkedList.

cipta

// Создаем новый список
ArrayList<String> arrayList = new ArrayList<>();
// Создается новый список и указывается начальный размер внутреннего массива
ArrayList<String> arrayListLarge = new ArrayList<>(100000);

// Создаем новый LinkedList
LinkedList<String> linkedList = new LinkedList<>();

Nambahake unsur

// Новый элемент добавляется в конец
arrayList.add("Johhny");
// Новый элемент добавляется в указанную позицию (в данном случае — в начало)
arrayList.add(0, "Watson");

// Новый элемент добавляется в конец двусвязного списка
linkedList.add("Java");
// Новый элемент добавляется в нулевую позицию списка:
linkedList.addFirst("I think");
// Новый элемент добавляется в конец списка
linkedList.addLast("language");
// Новый элемент добавляется в указанную позицию
linkedList.add(2, "is a terrific");

// Получение размера списков
int arraySize = arrayList.size(); // 2
int linkedSize = linkedList.size(); // 4
Sepisanan, cara add()AND addLast()nindakake fungsi sing padha, nanging cara kasebut add()teka ing LinkedList saka antarmuka List, lan metode addLastkasebut saka antarmuka Deque. LinkedList ngetrapake loro antarmuka kasebut. Praktek sing apik ing kasus iki yaiku nggunakake metode sing paling cocok kanggo konteks. Yen LinkedList digunakake minangka antrian, luwih becik nggunakake addLast. Yen LinkedList digunakake minangka dhaptar, mesthine cocog kanggo nggunakake add().

Mbusak unsur

// Удаление element по индексу
arrayList.remove(0);
// Удаление element по значению
arrayList.remove("Johnny");

// Удаление первого element в списке
linkedList.removeFirst();
// Удаление первого element в списке, фактически вызов предыдущего метода
linkedList.remove();
// Удаление последнего element в списке
linkedList.removeLast();
// Удаление первого вхождения element в список
linkedList.removeFirstOccurrence("language");
// Удаление последнего вхождения element в список
linkedList.removeLastOccurrence("Java");
// Удаление по индексу
linkedList.remove(2);
Yen obyek dibusak kanthi indeks, metode kasebut ngasilake obyek sing wis dibusak. Yen obyek wis dibusak dening Nilai (utawa unsur pisanan utawa pungkasan LinkedList dibusak), cara bali bener yen obyek ketemu lan dibusak, palsu digunakake.

Ngakses item lan nggoleki dhaptar

// Доступ к элементу по индексу
String arrayElement = arrayList.get(2);
// Поиск element по значению
int arrayIndex = arrayList.indexOf("Watson");
// Поиск последнего индекса вхождения element в список
int lastArrayIndex = arrayList.lastIndexOf("Watson");

// Доступ по индексу
String linkedElement = linkedList.get(3);
// Получение первого element
String firstLinkedElement = linkedList.getFirst();
// Получение последнего element
String lastLinkedElement = linkedList.getLast();

// Поиск element по значению
int linkedIndex = linkedList.indexOf("Java");
// Поиск последнего индекса вхождения element в список
int lastLinkedIndex = linkedList.lastIndexOf("Java");

Mlaku-mlaku ing gelung

// Использование обычного цикла
for(int i = 0; i<arrayList.size(); i++) {
  String value = arrayList.get(i);
  System.out.println(value);
}

for(int i = 0; i<linkedList.size(); i++) {
  String value = linkedList.get(i);
  System.out.println(value);
}

// Использование цикла for-each
for(String s : arrayList) {
  System.out.println(s);
}

for(String s : linkedList) {
  System.out.println(s);
}
Kene iku worth ngandika sawetara tembung babagan panelusuran. Akeh pangembang pemula, nalika nggoleki unsur ing dhaptar, miwiti panelusuran ing daur ulang, mbandhingake kabeh unsur karo sing digoleki, sanajan ana metode indexOf()lan lastIndexOf(). Sampeyan uga bisa nggunakake cara contains()kanggo entuk kasunyatan manawa ana unsur ing dhaptar:
boolean isContainsSherlock = arrayList.contains("Sherlock");
boolean isContainsPhp = linkedList.contains("Php");

Link kanggo maca luwih

  1. Ana artikel sing apik banget babagan mbusak unsur saka ArrayList. Amarga kasunyatan manawa iki minangka array Jawa dinamis , ana akeh subtleties kanggo mbusak unsur.
  2. Cara kerja ArrayList digambarake kanthi rinci ing kene .
  3. A sethitik liyane babagan LinkedList.
  4. Saperangan artikel saka Habr babagan ArrayList lan LinkedList .
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION