Feýerwerk! Programmist bolmak aňsat däl. Yzygiderli öwrenmeli, elmydama täze bir zat öwrenmeli. Emma, beýleki işlerde bolşy ýaly, iň kyn zat başlamak, maksadyňyza ilkinji ädim ätmekdir. Bu sahypada oturyp, bu makalany okaýandygyňyz üçin, birinji ädimi tamamladyňyz. Diýmek, indi ýolda haýallaşman ýa-da öçürmän maksatly maksadyňyza tarap hereket etmeli. Dogry düşünýän bolsam, maksadyňyz Java dörediji bolmak ýa-da bir bolsaňyz bilimiňizi artdyrmak. Şeýle bolsa, dogry ýerdediňiz, sebäbi 250+ Java dörediji söhbetdeşlik soraglarynyň giň sanawyny seljermegi dowam etdireris. Dowam edeliň!
Kolleksiýalar
84. Iteratorlar we olaryň ulanylyşy barada bize aýdyň
Kolleksiýalar, Java döredijiler bilen geçirilen islendik söhbetdeşlikde iň halanýan mowzuklaryň biri we kolleksiýa iýerarhiýasy barada aýdylanda, dalaşgärler köplenç Kolleksiýa interfeýsinden başlaýandygyny aýdýarlar . Thisöne bu dogry däl, sebäbi bu interfeýsiň üstünde başga biri bar - Iterable . Bu interfeýs , häzirki kolleksiýa üçin Iterator obýektini çagyrmaga mümkinçilik berýän iterator () usulyny görkezýär. Bu Iterator obýekti näme ? Iterator , ulanyjynyň belli bir kolleksiýanyň ýerine ýetirilişini bilmezden, kolleksiýanyň üstünden geçmek we elementleriň üstünden gaýtalamak ukybyny üpjün edýän obýektdir. .Agny, bu ýygyndydaky elementlere haýsydyr bir görkeziji bolup, bolşy ýaly, içindäki belli bir ýere seredýär. Iteratoryň aşakdaky usullary bar:- hasNext () - görkezijiden soň ýerleşýän bir element bar bolsa (bu usul kolleksiýanyň soňuna ýetilendigini anyklamaga mümkinçilik berýär);
- indiki () - görkezijiden soň indiki elementi yzyna berýär. Eger ýok bolsa, NoSuchElementException zyňylýar . Thisagny, bu usuly ulanmazdan ozal elementiň bardygyna göz ýetirmek has gowudyr - hasNext () ulanyp ;
- aýyrmak () - indiki () usuly bilen ýygyndydan alnan iň soňky elementi aýyrýar . Indiki () aýyrmak () çagyrylmazdan ozal çagyrylmadyk bolsa , kadadan çykma - IllegalStateException ;
- forEachRemaining (<Consumer>) - kolleksiýanyň her elementi bilen geçirilen hereketi ýerine ýetirýär (usul Java 8-de peýda boldy).
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 görkeziler:
0
Bu elementleriň aýrylmagynyň üstünlikli bolandygyny aňladýar. Iteratorymyz bolansoň, ähli elementleri ekrana çap etmegiň usulyny ulanyp bilerdik:
iterator.forEachRemaining(x -> System.out.print(x));
Thisöne şondan soň iterator mundan beýläk ulanmak üçin ýaramsyz bolar, sebäbi tutuş sanawy geçerdi we yzygiderli iteratoryň yzyna yzarlamak usuly ýok. Bu ýerde ýuwaş-ýuwaşdan LinkedList-e , ýagny, listIterator () usulyna ýakynlaşýarys , bu döwrebaplaşdyrylan iterator görnüşini - ListIterator . Adaty (standart) iterator usullaryndan başga-da goşmaça usullary bar:
- goş (<Element>) - sanawa täze element girizýär;
- hasPrevious () - görkezijiniň öňünde ýerleşýän bir element bar bolsa (öňki elementiň bardygyny ýa-da ýokdugyny) görkezýär ;
- nextIndex () - görkezijiden soň indiki elementiň sanawynda indeksini görkezýär;
- öňki () - öňki elementi görkezýär (görkezijä çenli);
- previousIndex () - öňki elementiň indeksini görkezýär;
- set (<Element>) - Indiki () ýa-da öňki () usullar bilen yzyna gaýtarylan soňky elementi çalyşýar .
85. Java kolleksiýa çarçuwasyndaky ýygnamak iýerarhiýasy näme?
Java-da iki kolleksiýa iýerarhiýasy bar. Birinji iýerarhiýa, aşakdaky gurluş bilen Kolleksiýa iýerarhiýasynyň özi: Öz gezeginde aşakdaky bölümlere bölünýär:- Set , şeýle maglumat gurluşyny tertipsiz üýtgeşik (gaýtalanmaýan) elementleri öz içine alýan interfeýsdir . Interfeýsde adaty ýerine ýetirişler bar - TreeSet , HashSet we LinkedHashSet .
- Sanaw, obýektleriň tertipli yzygiderliligini saklaýan maglumat gurluşyny beýan edýän interfeýsdir. Sanawdaky ýagdaýlar, bu ýygyndydaky indeksleri bilen girizilip we pozulyp bilner (bir massiw bilen meňzeş, ýöne dinamiki ölçegi bilen). Interfeýsde adaty ýerine ýetirişler bar - ArrayList , Vektor ( könelişen we aslynda ulanylmaýar ) we LinkedList .
- Nobat , elementleri FIFO - First In First Out düzgünine eýerýän nobat görnüşinde saklaýan maglumat gurluşyny suratlandyrýan interfeýsdir . Interfeýsde aşakdaky standart amallar bar: LinkedList (hawa, nobaty hem ýerine ýetirýär ) we PriotityQueue .
86. “ArrayList” -iň içki gurluşy näme?
“ArrayList” massiwine meňzeýär, ýöne dinamiki giňeltmek ukyby bilen. Bu näme many berýär? Hakykat, “ArrayList” yzygiderli massiwiň üstünde işleýär, ýagny elementleri içerki massiwde saklaýar (deslapky ululygy 10 öýjük). Içerki massiw doly bolanda, ululygy formula bilen kesgitlenýän täze massiw döredilýär:<размерТекущегоМассива> * 3 / 2 + 1
.Agny, massiwimiziň ululygy 10 bolsa, täzesiniň ululygy bolar: 10 * 3/2 + 1 = 16. Ondan soň, birinji (köne) massiwdäki ähli bahalar oňa ulanylýar. ýerli System.arraycopy () usuly we birinji massiw öçürildi. Aslynda, “ArrayList” -iň dinamiki giňelmegi şeýle amala aşyrylýar . Iň köp ulanylýan ArrayList usullaryna seredeliň : 1. goşuň (<Elelement>) - massiwiň soňuna bir element goşýar (iň soňky boş öýjüge) we ilki bu massiwde boşlugyň bardygyny barlaň. Ol ýerde ýok bolsa, elementleriň göçürilen täze massiw döredilýär. Bu amalyň logarifmiki çylşyrymlylygy O (1). Şuňa meňzeş usul bar - goşuň (<Index>, <Elelement>) . Sanawyň soňuna (massiwine) däl-de, argument hökmünde gelen indeks bilen belli bir öýjüge element goşýar. Bu ýagdaýda logarifmiki çylşyrymlylyk, goşulan ýerine baglylykda tapawutlanýar:
- bu takmynan sanawyň başy bolan bolsa, logarifmiki çylşyrymlylyk O (N) -e ýakyn bolar, sebäbi täzesiniň sag tarapynda ýerleşýän ähli elementler bir öýjügi saga geçirmeli bolar;
- element ortasyna girizilen bolsa - O (N / 2) sebäbi sanaw elementleriniň diňe ýarysyny bir öýjügi saga geçirmeli.
87. “LinkedList” -iň içki gurluşy näme?
“ArrayList” içerki massiwde elementleri öz içine alýan bolsa , “LinkedList” goşa baglanyşyk sanawy görnüşinde. Diýmek, her elementde öňki elemente ( öňki ) we indiki elemente ( indiki ) baglanyşyk bar. Birinji elementiň öňki bilen baglanyşygy ýok (bu birinji), ýöne sanawyň başy hasaplanýar we LinkedList-iň gönüden -göni baglanyşygy bar. Iň soňky elementiň aslynda indiki elementi ýok, ol sanawyň guýrugy, şonuň üçin LinkedList-iň özünde göni baglanyşyk bar . Şonuň üçin sanawyň kellesine ýa-da guýrugyna girmegiň logarifmiki çylşyrymlylygy O (1). “ArrayList” -de sanaw ulalansoň içerki massiw köpeldi, ýöne bu ýerde hemme zat has ýönekeý bolýar - element goşanyňyzda iki baglanyşyk üýtgeýär. Iň köp ulanylýan LinkedlList usullaryna seredeliň : 1. goşuň (<Elelement>) - sanawyň soňuna goşmak, ýagny. soňky elementden (5) soň täze elemente baglanyşyk goşular . Täze elementiň öňki elementi ýaly iň soňky (5) bilen baglanyşygy bolar . Şeýle amalyň logarifmiki çylşyrymlylygy O (1) bolar, sebäbi diňe soňky elemente baglanyşyk gerek we ýadyňyzda bolsa, guýrugyň LinkedList -den göni baglanyşygy bar we oňa girmegiň logarifmiki çylşyrymlylygy minimaldyr. 2. goşuň (<Index>, <Elelement>) - indeks boýunça element goşmak. Mysal üçin, sanawyň ortasyna bir element goşulanda, kelläniň we guýrugyň elementleri (iki tarapda) ilki islenýän ýer tapylýança gaýtalanýar. Üçünji bilen dördünjiniň arasynda bir element goýmak islesek (ýokardaky suratda), dogry ýer gözlänimizde, üçünji elementiň indiki baglanyşygy eýýäm täze birine yşarat eder. Täzesi üçin öňki baglanyşyk üçünji baglanyşygy görkezer. Şoňa laýyklykda dördünji elementiň - öňki - baglanyşygy eýýäm täze elemente, täze elementiň indiki baglanyşygy bolsa dördünji elemente yşarat eder: Bu usulyň logarifmiki çylşyrymlylygy täze elemente berlen görkezijä bagly bolar:- kellä ýa-da guýruga ýakyn bolsa, O (1) -e ýakynlaşar, sebäbi elementleriň üstünde gaýtalamak hökman bolmaz;
- ortasyna ýakyn bolsa, O (N / 2) - kelläniň we guýrugyň elementleri zerur element tapylýança bir wagtda tertiplener.
88. “HashMap” -yň içki gurluşy näme?
Java dörediji bilen söhbetdeşlik geçirende iň meşhur soraglaryň biri bolsa gerek. HashMap v açar bahaly jübütler bilen işleýär . “HashMapv” -yň içinde nädip saklanýar ? “HashMap” -yň içinde köp sanly düwün bar:Node<K,V>[] table
Düzgüne görä, massiwiň ululygy 16 bolup, elementler bilen doldurylanda her gezek iki esse köpelýär ( LOAD_FACTOR ýetilende - dolulygyň belli bir göterimi, adaty ýagdaýda 0,75 ). Her düwün açaryň, açaryň, bahanyň we indiki elementiň baglanyşygyny saklaýar: Aslynda, “indiki elemente baglanyşyk”, her elementiň baglanyşygy bolan ýeke-täk sanaw bilen iş salyşýandygymyzy aňladýar. indiki. Hagny, “HashMap” maglumatlary ýeke-täk baglanyşdyrylan sanawlarda saklaýar. Immediatelyöne derrew bellärin: tablisa massiwiniň bir öýjüginde birden köp elementden ybarat birmeňzeş baglanyşyk sanawyna baglanyşyk bar bolsa, bu gowy däl. Bu hadysa çaknyşyk diýilýär . Firstöne ilki bilen zatlar. Goýmak usuly bilen täze jübütiň nädip tygşytlanýandygyny göreliň . Ilki bilen açaryň hachCode () alynýar. Şonuň üçin hashmapyň dogry işlemegi üçin bu usulyň açar hökmünde ýokaşdyrylan sapaklaryny almaly. Soňra bu hash kody içerki usulda - hash () - tablisa massiwiniň ululygyndaky san kesgitlemek üçin ulanylýar . Ondan soň, alnan belgini ulanyp, tablisa massiwiniň belli bir öýjügine girilýär . Bu ýerde iki ýagdaý bar:
- Öýjük boş - täze düwün bahasy içinde saklanýar .
- Öýjük boş däl - düwmeleriň bahasy deňeşdirilýär. Deň bolsa, täze düwün bahasy köne ýazýar, deň däl bolsa, indiki elemente girýär we açary bilen deňeşdirilýär ... we ş.m. täze baha köne biriniň üstünden ýazylýança ýa-da soňuna ýetýänçä we ş.m. baglanyşdyrylan sanaw we iň soňky element hökmünde şol ýerde saklanar.
GO TO FULL VERSION