
Koleksi
84. Marang kita bab iterator lan carane padha digunakake
Koleksi minangka topik favorit ing wawancara pangembang Java. Nalika mangsuli pitakon babagan hirarki koleksi, calon asring ujar manawa diwiwiti karo antarmuka Koleksi . Nanging iki ora kaya ngono. Ana antarmuka liyane siji tingkat ndhuwur: Iterable . Antarmuka iki kasusun saka iterator () cara, sing ngijini sampeyan ngakses obyek Iterator kanggo koleksi saiki. Lan apa persis obyek Iterator iki ? Obyek Iterator menehi kemampuan kanggo pindhah liwat koleksi lan iterate liwat unsur, lan pangguna ora perlu ngerti rincian implementasine tartamtu saka koleksi. Ing tembung liyane, iku jenis pointer kanggo unsur koleksi, kaya-kaya ngintip ing salah siji saka wong-wong mau. Iterator nduweni cara kayata:-
hasNext () - ngasilake bener yen pengulangan nduweni unsur liyane (cara iki ngidini sampeyan ngerti yen sampeyan wis tekan pungkasan koleksi);
-
sabanjuré () - ngasilake item sabanjuré ing pengulangan. Yen ora ana siji, banjur NoSuchElementException dibuwang. Tegese sadurunge sampeyan nggunakake cara iki, iku paling apik nggunakake hasNext () cara kanggo mesthekake yen unsur sabanjuré ana;
-
mbusak () - mbusak saka koleksi unsur pungkasan ditampa nggunakake sabanjuré () cara. Yen sabanjuré () wis tau disebut, banjur nelpon mbusak () bakal nimbulaké IllegalStateException di buwang;
-
forEachRemaining(<Consumer>) - nglakokake tumindak sing dilewati ing saben unsur koleksi (cara iki muncul ing Jawa 8).
List<String> list = new ArrayList<>();
list.add("Hello ");
list.add("World, ");
list.add("It's ");
list.add("Amigo!");
Iterator iterator = list.iterator();
while(iterator.hasNext()) {
iterator.next();
iterator.remove();
}
System.out.println(list.size());
Konsol bakal nampilake ing ngisor iki:
iterator.forEachRemaining(x -> System.out.print(x));
Nanging yen kita nindakake iki, iterator dadi ora cocog kanggo nggunakake luwih: wis traversed kabeh dhaftar, lan iterator biasa ora duwe cara kanggo iterasi mundur. Lan sing nggawe segue becik menyang diskusi LinkedList , khusus, cara listIterator () , sing ngasilake jinis iterator sing ditingkatake: ListIterator . Saliyane metode iterator biasa (standar), jinis iki nduweni:
-
add (<Element>) - nambah unsur anyar menyang dhaptar;
-
hasPrevious () - ngasilake bener yen ana unsur sing ana sadurunge unsur sabanjure (yen ana unsur sadurunge);
-
nextIndex () - ngasilake indeks saka unsur sabanjuré;
-
sadurungé () - ngasilake unsur sadurungé (siji sadurunge unsur sabanjuré);
-
PreviousIndex ngasilake indeks saka unsur sadurunge.
-
set (<Elemen>) - ngganti unsur pungkasan bali dening sabanjuré () utawa sadurungé () .

85. Hierarki koleksi apa sing ana ing Kerangka Koleksi Jawa?
Ana rong hirarki koleksi ing Jawa. Hierarki pisanan yaiku hirarki Koleksi, sing nduweni struktur ing ngisor iki:
-
Set minangka antarmuka sing njlèntrèhaké sawijining set, struktur data sing ngemot unsur unik sing ora diurutake (ora diulang). Antarmuka iki nduweni sawetara implementasi standar: TreeSet , HashSet , lan LinkedHashSet .
-
Dhaptar minangka antarmuka sing njlèntrèhaké struktur data sing nyimpen urutan obyek. Obyek ing Dhaptar bisa dilebokake lan dibusak dening indeks ing dhaptar (kaya array, nanging kanthi ukuran dinamis). Antarmuka iki uga nduweni sawetara implementasi standar: ArrayList , Vector ( deprecated and not actually used ), lan LinkedList .
-
Antrian minangka antarmuka sing njlèntrèhaké struktur data sing nyimpen item ing antrian First In First Out (FIFO) . Antarmuka iki nduweni implementasi standar ing ngisor iki: LinkedList (pancen, uga ngetrapake Queue ) lan PriotityQueue .


86. Apa struktur internal ArrayList?
ArrayList kaya array, nanging bisa nggedhekake kanthi dinamis . Apa tegese? Ing hood, ArrayList nggunakake array biasa, yaiku nyimpen unsur ing array internal sing ukuran standar 10 sel. Sawise array internal kebak, array anyar digawe. Ukuran array anyar ditemtokake dening rumus iki:<size of the current array> * 3 / 2 + 1
Dadi, yen ukuran array kita 10, banjur ukuran sing anyar bakal dadi: 10 * 3/2 + 1 = 16. Banjur kabeh nilai saka array asli (lawas) disalin menyang nggunakake built-in. System.arraycopy () cara, lan Uploaded asli dibusak. Cekakipun, punika cara ArrayList ngleksanakake pangowahan ukuran dinamis. Ayo dadi nimbang cara ArrayList paling populer : 1. nambah (<Elemen>) - nambah unsur menyang mburi Uploaded (ing sel kosong pungkasan), sawise pisanan mriksa apa ana sel kasedhiya ing Uploaded. Yen ora, larik anyar digawe, lan unsur disalin menyang. Kompleksitas wektu operasi iki yaiku O(1). Ana metode add(<Indeks>, <Elemen>) sing padha . Iku nambah unsur ora kanggo mburi dhaftar (larik), nanging kanggo sel tartamtu dituduhake dening indeks sing teka ing minangka pitakonan. Ing kasus iki, kerumitan wektu bakal beda-beda gumantung ing ngendi sampeyan nambah:
- yen tambah cedhak karo wiwitan dhaptar, banjur kerumitan wektu bakal cedhak karo O (N), amarga kabeh unsur sing ana ing sisih tengen sing anyar kudu dipindhah siji sel menyang sisih tengen;
- yen unsur dilebokake ing tengah, iku bakal O (N / 2), awit kita mung kudu ngalih setengah saka dhaftar item siji sel menyang tengen.
87. Apa struktur internal LinkedList?
ArrayList ngemot unsur ing array internal, nanging LinkedList nyimpen ing dhaptar dobel-link. Iki tegese saben unsur ngemot pranala menyang unsur sadurunge lan menyang unsur sabanjure . Unsur pisanan ora nyambung menyang unsur sadurunge (sawise kabeh, iku pisanan). Iki uga dianggep minangka kepala dhaptar, lan obyek LinkedList duwe referensi langsung. Kajaba iku, unsur pungkasan ora duwe unsur sabanjure, amarga iku buntut saka dhaftar. Objek LinkedList uga ngrujuk langsung. Iki tegese kerumitan wektu ngakses sirah utawa buntut dhaptar yaiku O (1). Ing ArrayList , yen dhaftar mundak akeh, banjur array internal mundak akeh. Ing kene kabeh luwih gampang: nambah referensi gampang kaya ngganti sawetara tautan. Ayo goleki sawetara cara LinkedList sing paling akeh digunakake: 1. nambah (<Elemen>) - nambah unsur ing pungkasan dhaptar, yaiku sawise unsur pungkasan (5), link menyang unsur anyar bakal ditambahake minangka sabanjure. . Referensi sadurunge ing unsur anyar bakal nuduhake unsur (5) sing saiki ndhisiki ing dhaptar. Kerumitan wektu operasi iki O (1), awit kita mung perlu link menyang unsur pungkasan, lan sing bakal ngelingi, obyek LinkedList referensi langsung kanggo buntut, lan ngakses wis minimal kerumitan wektu pancet. 2. nambah (<Indeks>, <Elemen>) - nambah unsur kanthi indeks. Nalika nambah unsur, ayo ngomong, ing tengah dhaftar, cara iki pisanan iterates liwat unsur saka sirah lan buntut (ing loro arah) nganti panggonan sing dipengini ketemu. Yen kita nambah unsur antarane unsur katelu lan papat (ing gambar ndhuwur), banjur link sabanjuré saka unsur katelu bakal nuding unsur anyar. Lan sadurunge saka unsur sing mentas ditambahake bakal nuding menyang sing katelu. Sabanjure, pranala lawas unsur papat lawas saiki bakal nuding menyang unsur anyar, lan pranala sabanjuré unsur anyar bakal nuding unsur papat anyar: Komplek wektu cara iki gumantung ing indeks saka unsur anyar:

- yen cedhak karo sirah utawa buntut, operasi bakal nyedhaki O (1), awit iku ora bener perlu kanggo iterate liwat unsur;
- yen cedhak karo tengah, kita bakal duwe O (N / 2), wiwit cara bakal nelusuri saka sirah lan buntut ing wektu sing padha nganti unsur sing dikarepake ditemokake.

88. Apa struktur internal HashMap?
Iki bisa dadi salah sawijining pitakonan wawancara sing paling populer kanggo takon marang calon pangembang Jawa. A HashMap bisa digunakake karo pasangan kunci-nilai . Kepiye carane disimpen ing HashMap dhewe? HashMap nduweni susunan node internal:Node<K,V>[] table
Kanthi gawan, ukuran array 16, lan tikel kaping pindho saben diisi unsur (yaiku, nalika LOAD_FACTOR tekan ; nemtokake batesan kanggo kebak array bisa entuk - minangka standar, yaiku 0.75 ) . Saben simpul nyimpen hash kunci, kunci, nilai, lan referensi kanggo unsur sabanjure: 
- Sèl kosong - ing kasus iki, nilai Node anyar disimpen ing njero.
- Sèl ora kosong — ing kasus iki, nilai tombol dibandhingake. Yen padha, banjur Nilai Node anyar nimpa sing lawas; yen ora padha, banjur sabanjuré diakses , lan tombol dibandhingake ... Lan ing, nganti nilai anyar salah siji overwrites sawetara nilai lawas utawa kita tekan mburi singly disambung dhaftar lan banjur nyimpen nilai anyar ana minangka unsur pungkasan.

GO TO FULL VERSION