JavaRush /Блоги Java /Random-TG /Java ArrayList дар тасвирҳо

Java ArrayList дар тасвирҳо

Дар гурӯҳ нашр шудааст
Салом! Лекцияи имруза ArrayList, аз як тараф, назар ба лекцияхои пештара соддатар бошад, аз тарафи дигар, душвортар хохад буд. ArrayList дар тасвирҳо - 1Ин мушкилтар аст, зеро имрӯз мо "дар зери кулоҳ" нигоҳ мекунем ArrayListва меомӯзем, ки ҳангоми амалиёт бо он чӣ рӯй медиҳад. Аз тарафи дигар, дар ин лекция кариб ягон code — асосан расмхо ва шарху эзохотхо вучуд нахоханд дошт. Пас, биёед меравем :) Тавре ки шумо аллакай медонед, дар дохor ArrayList"a" массиви оддӣ мавҷуд аст, ки ҳамчун анбори додаҳо амал мекунад. Дар аксари мавридҳо, мо андозаи дақиқи рӯйхатро муайян намекунем. Аммо массиви дохилӣ бояд андоза дошта бошад! Ин дуруст аст. Андозаи пешфарзи он [10] аст .
public static void main(String[] args) {
   ArrayList<Car> cars = new ArrayList<>();
}
ArrayList дар тасвирҳо - 2Аввалан, биёед бубинем, ки илова кардани унсури нав чӣ гуна аст. Пеш аз ҳама, тафтиш карда мешавад , ки оё дар массиви дохилӣ фазои кофӣ вуҷуд дорад ва оё як элементи дигар мувофиқ аст. Агар фосила мавҷуд бошад, элементи нав ба охири рӯйхат илова карда мешавад. Вақте ки мо "то охир" мегӯем, мо ячейкаи охирини массивро дар назар намегирем (ин аҷиб мебуд). Ин ба чашмаки дар паҳлӯи элементи охирини ҷорӣ дахл дорад. Индекси он ба cars.size(). Рӯйхати мо ҳоло холӣ аст ( cars.size() = 0). Мутаносибан, элементи нав ба чашмак бо индекс илова карда мешавад 0.
ArrayList<Car> cars = new ArrayList<>();
Car ferrari = new Car("Ferrari 360 Spider");
cars.add(ferrari);
ArrayList дар тасвирҳо - 3Дар ин ҷо ҳама чиз равшан аст. Агар воридкунӣ дар мобайн, яъне байни якчанд элемент гузаронида шавад, чӣ мешавад?
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, которая уже занята
}
Боз ҳам, он аввал месанҷад, ки оё дар массив фазои кофӣ вуҷуд дорад. Агар фазои кофӣ мавҷуд бошад, элементҳо аз чашмаке, ки мо элементи навро мегузорем, ба тарафи рост гузаронида мешаванд. Мо ба ячейкаи дорои индекси 1 мегузорем. Яъне элементи аз ячейкаи 3 ба чашмаки 4, элементи 2 ба чашмаки 3, элементи 1 ба чашмаки 2 нусхабардорӣ карда мешавад. ArrayList кории дар расмҳо - 4Баъд аз ин, элементи нави мо ба ҷои он часбонда мешавад. Элементи қаблӣ ( bugatti) аллакай аз он ҷо ба макони нав нусхабардорӣ шудааст. ArrayList кории дар расмҳо - 5Акнун биёед бифаҳмем, ки ин раванд чӣ гуна сурат мегирад, агар дар массив ҷой барои воридкунӣ вуҷуд надошта бошад. ArrayList кории дар расмҳо - 6Аввалан, албатта, тафтиш карда мешавад, ки оё фазои кофӣ вуҷуд дорад. Агар маълум шавад, ки фазои кофӣ нест, ArrayListдар дохor 'a массиви нави андоза (андозаи OldArray * 1.5) + 1 сохта мешавад.Дар ҳолати мо, массиви нав андозаи 16 ячейка дорад. Ҳама унсурҳои ҷорӣ фавран дар он ҷо нусхабардорӣ карда мешаванд. Корҳои ArrayList дар расмҳо - 7Массиви кӯҳна аз ҷониби коллектори партовҳо нест карда мешавад ва танҳо массиви нав ва васеъшуда боқӣ мемонад. Ҳоло барои элементи нав фазои холӣ мавҷуд аст. Мо онро ба ҳуҷайраи 3, ки ишғол аст, часбонем. Акнун тартиби шинос оғоз меёбад. Ҳама унсурҳое, ки аз индекси 3 сар мешаванд, як чашмак ба тарафи рост кӯчонида мешаванд ва элементи нав оромона илова карда мешавад. ArrayList кории дар расмҳо - 8Ва ҳоло воридкунӣ муваффақ аст! Мо дохилкуниро тартиб додем. Акнун биёед дар бораи нест кардани элементҳо сӯҳбат кунем . Тавре ки шумо дар хотир доред, ҳангоми кор бо массивҳо мо ба мушкилот дучор шудем: вақте ки мо онҳоро нест кардем, дар он "сӯрохӣ" боқӣ монд. Ягона роҳи ҳал ин буд , ки элементҳо ҳар дафъае, ки онҳо нест карда мешуданд, ба чап кӯчонида шаванд ва шумо бояд codeи сменаро худатон нависед. ArrayListаз руи хамин принцип кор мекунад, вале дар он ин механизм аллакай ба таври автоматй чорй карда мешавад. ArrayList кории дар расмҳо - 9Чунин ба назар мерасад: ArrayList кории дар расмҳо - 10Ва дар ниҳоят мо натиҷаи дилхоҳ мегирем: ArrayList кории дар расмҳо - 11Элемент lamboбомуваффақият нест карда шуд. Дар ин ҷо мо як хориҷ аз миёна кард. Равшан аст, ки нест кардан аз охири рӯйхат тезтар хоҳад буд, зеро элементи дилхоҳ бе иваз кардани ҳама дигарон хориҷ карда мешавад. Биёед бори дигар ба андозаи массиви дохилӣ ва нигоҳдории он дар хотира назар андозем. Тавсеаи массив равандест, ки миқдори муайяни захираҳоро мегирад. Аз ин рӯ, шумо набояд ArrayListбо андозаи пешфарз эҷод накунед, агар шумо боварӣ дошта бошед, ки он ҳадди аққал 100 элемент дорад. То он даме, ки шумо ворид кардани элементи 100-умро мегиред, массиви дохилӣ 6 маротиба васеъ мешавад ва ҳар дафъа ҳамаи элементҳоро интиқол медиҳад.
  • аз 10 элемент то 16
  • аз 16 элемент то 25
  • аз 25 то 38
  • аз 38 то 58
  • аз 58 то 88
  • аз 88 то 133 (мувофиқи формула (андозаи массиви кӯҳна * 1.5) + 1)
Табиист, ки ин аз чихати захирахо хеле гарон аст. Аз ин рӯ, агар шумо аллакай якчанд (ҳадди ақал тахминии) шумораи унсурҳои захирашударо медонед, беҳтар аст, ки фавран рӯйхатро бо массиви андозаи муайян эҷод кунед:
ArrayList<Car> cars = new ArrayList<>(100);
Акнун массиви 100 элемент фавран дар хотира ҷудо карда мешавад, ки ин самараноктар хоҳад буд, зеро захираҳо ҳангоми васеъшавӣ беҳуда сарф намешаванд. Тарафи дигари танга низ мавчуд аст. Вақте ки an objectҳо аз массиви дохилӣ хориҷ карда мешаванд ArrayList, андоза ба таври худкор кам намешавад. Масалан, мо ArrayListмассиви дохorи 88 элемент дорем, ки пурра пур шудааст: ArrayList кории дар расмҳо - 13Дар давоми кори барнома мо 77 элементро аз он хориҷ мекунем ва дар он танҳо 11 элемент боқӣ мемонад: Оё ArrayList кории дар расмҳо - 14шумо аллакай фаҳмидед, ки мушкилот чист? Истифодаи бесамар аз хотира, албатта! Мо танҳо 11 ячейка истифода мебарем, дар ҳоле ки хотираи мо барои 88 элемент ҷудо карда шудааст - ин нисбат ба мо 8 маротиба зиёдтар аст! Барои амалӣ намудани оптимизатсия дар ин ҳолат, шумо метавонед як усули махсуси синфро истифода баред ArrayList- trimToSize(). Он дарозии массиви дохorро ба миқдори элементҳои дар он нигоҳ дошташударо "бурида" мекунад. Рӯйхати корӣ дар расмҳо - 15Акнун ба қадри зарурӣ хотира ҷудо карда мешавад! :)
Шарҳҳо
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION