JavaRush /Java Blog /Random-TK /Suratlarda Java ArrayList

Suratlarda Java ArrayList

Toparda çap edildi
Salam! Şu günki leksiýa ArrayList, bir tarapdan, has ýönekeý we beýleki tarapdan, öňki sapaklardan has kyn bolar. Suratlarda işlemek ArrayList - 1Has kyn, sebäbi bu gün "kapotyň aşagyna" serederis ArrayListwe amallar wagtynda näme bolýandygyny öwreneris. Başga bir tarapdan, bu leksiýada kod ýok diýen ýaly - esasanam suratlar we düşündirişler. Şeýlelik bilen, gideliň :) Bilşiňiz ýaly, içerde ArrayListmaglumat dükany hökmünde hereket edýän adaty bir massiw bar. Köplenç sanawyň takyk ululygyny görkezmeýäris. Internalöne içerki massiwde belli bir ululyk bolmaly! Bu hakykat. Bellenen ululygy [10] .
public static void main(String[] args) {
   ArrayList<Car> cars = new ArrayList<>();
}
Suratlarda işlemek ArrayList - 2Ilki bilen, täze element goşmagyň nämä meňzeýändigini göreliň. Ilki bilen içerki massiwde ýeterlik ýeriň bardygyny ýa-da ýene bir elementiň gabat geljekdigini barlamak barlanýar . Boş ýer bar bolsa, sanawyň soňuna täze element goşulýar. “Ahyryna” diýlende, massiwiň soňky öýjügini aňlatmaýarys (bu geň bolar). Bu soňky häzirki elementiň gapdalyndaky öýjügi aňladýar. Onuň görkezijisi deň bolar cars.size(). Sanawymyz häzirki wagtda boş ( cars.size() = 0). Şoňa laýyklykda öýjüge indeks bilen täze element goşular 0.
ArrayList<Car> cars = new ArrayList<>();
Car ferrari = new Car("Ferrari 360 Spider");
cars.add(ferrari);
Suratlarda işlemek ArrayList - 3Bu ýerde hemme zat düşnüklidir. Goýmak ortada, ýagny birnäçe elementiň arasynda amala aşyrylsa näme bolar?
public static void main(String[] args) {
   ArrayList<Car> cars = new ArrayList<>();
   Car ferrari = new Car("Ferrari 360 Spider");
   Car bugatti = new Car("Bugatti Veyron");
   Car lambo = new Car("Lamborghini Diablo");
   Car ford = new Car("Ford Modneo");

   cars.add(ferrari);
   cars.add(bugatti);
   cars.add(lambo);

   cars.add(1, ford);//добавляем ford в ячейку 1, которая уже занята
}
Againene-de, ilki bilen massiwde ýeterlik ýeriň bardygyny ýa-da ýokdugyny barlaýar. Enougheterlik ýer bar bolsa, elementler täze elementi goýýan öýjügimizden başlap sag tarapa geçirilýär. 1-nji görkeziji bilen öýjüge ýelmeýäris, ýagny 3-nji öýjükden 4-nji öýjüge, 2-nji elemente 3-nji öýjüge, 1-nji elemente 2-nji öýjüge göçürilýär. Suratlarda işlemek ArrayList - 4Ondan soň täze elementimiz ýerleşdirilýär. Öňki element ( bugatti) eýýäm ol ýerden täze ýere göçürildi. Suratlarda işlemek ArrayList - 5Indi, massiwde goýmak üçin boş ýer bolmasa, bu prosesiň nähili boljagyny anyklalyň. Suratlarda işlemek ArrayList - 6Ilki bilen, elbetde, ýeterlik ýeriň bardygyny ýa-da ýokdugyny barlaýarlar. Enougheterlik ýer ýok bolsa, ArrayList“a” -yň içinde täze ululyk (OldArray * 1.5) + 1 massiw döredilýär. Biziň ýagdaýymyzda täze massiw 16 öýjük bolar. Currenthli häzirki elementler derrew şol ýerde göçüriler. ArrayList suratlarda işleýär - 7Köne massiw hapa ýygnaýjy tarapyndan ýok ediler we diňe täze, giňeldilen galyndy galar. Indi täze element üçin boş ýer bar. Ony eýeleýän 3-nji öýjüge ýelmeýäris. Indi tanyş prosedura başlaýar. 3-nji indeksden başlaýan ähli elementler bir öýjügi saga geçirýär we täze element ýuwaşlyk bilen goşulýar. Suratlarda işlemek ArrayList - 8Indi goýmak üstünlikli! Goýmany düzdük. Indi elementleri aýyrmak barada gürleşeliň . .Adyňyzda bolsa, massiwler bilen işleýän wagtymyz bir mesele bilen ýüzbe-ýüz bolduk: pozanymyzda “deşikler” galypdy. Onlyeke-täk çözgüt, elementler her gezek öçürilende çepe geçirmekdi we smena üçin kod ýazmalydyňyz. ArrayListşol bir prinsipde işleýär, ýöne onda bu mehanizm eýýäm awtomatiki usulda durmuşa geçirilýär. Suratlarda işlemek ArrayList - 9Görnüşi ýaly: Suratlarda işlemek ArrayList - 10Iň soňunda bolsa islenýän netijäni alýarys: Suratlarda işlemek ArrayList - 11Element lamboüstünlikli öçürildi. Bu ýerde ortadan aýyrdyk. Sanawyň soňundan pozmagyň has çalt boljakdygy düşnüklidir, sebäbi islenýän element beýlekileriň hemmesini üýtgetmän aýrylýar. Içerki massiwiň ululygyna we ýatda saklanmagyna başga bir göz aýlalyň. Arraýy giňeltmek belli bir mukdarda çeşme talap edýän prosesdir. ArrayListŞonuň üçin azyndan 100 elementiň boljakdygyny anyk bilýän bolsaňyz, deslapky ululyk bilen döretmeli däl . 100-nji elementi girizip başlanyňyzda içerki massiw her gezek ähli elementleri geçirende 6 esse giňelder.
  • 10 elementden 16-a çenli
  • 16 elementden 25-e çenli
  • 25-den 38-e çenli
  • 38-den 58-e çenli
  • 58-den 88-e çenli
  • 88-den 133-e çenli (formula boýunça (Köne Arraý * 1,5) + 1)
Elbetde, bu serişdeler taýdan gaty gymmat. Şonuň üçin, saklanylýan elementleriň käbirini (iň bolmanda takmynan) bilýän bolsaňyz, belli bir ululykdaky sanaw bilen derrew sanaw döretmek has gowudyr:
ArrayList<Car> cars = new ArrayList<>(100);
Indi 100 elementden ybarat ýygyndy derrew ýatda saklanar, bu has täsirli bolar, sebäbi çeşmeler giňelmäge sarp edilmez. Şaýy puluň beýleki tarapy hem bar. Jisimler içerki massiwden aýrylanda ArrayListululygy awtomatiki azalmaýar. ArrayListMysal üçin, 88 elementden ybarat içerki massiwimiz bar , olar doly doldurylýar: Suratlardaky ArrayList - 13Programmanyň işleýşi wagtynda biz ondan 77 elementi aýyrýarys we diňe 11 sanysy galýar: Suratlarda işlemek ArrayList - 14Meseläniň nämedigini eýýäm çakladyňyzmy? Memoryadyň netijesiz ulanylmagy, elbetde! Diňe 11 öýjük ulanýarys, 88 element üçin bölünen ýadymyz bar - bu zerurlykdan 8 esse köp! Bu ýagdaýda optimizasiýany amala aşyrmak üçin ýörite synp usulyny ulanyp bilersiňiz ArrayList- trimToSize(). Içki massiwiň uzynlygyny häzirki wagtda saklanýan elementleriň sanyna “kesýär”. Suratlarda işlemek ArrayList - 15Indi näçe zerur bolsa ýat bölünýär! :)
Teswirler
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION