JavaRush /Blog Jawa /Random-JV /Java ArrayList ing gambar

Java ArrayList ing gambar

Diterbitake ing grup
Hello! Kuliah dina iki ArrayList, ing tangan siji, luwih prasaja, lan ing sisih liya, luwih angel tinimbang sing sadurunge. Dhaptar Array Kerja ing gambar - 1Luwih angel, amarga dina iki kita bakal katon "ing hood" ArrayListlan sinau apa sing kedadeyan sajrone operasi. Ing tangan liyane, meh ora ana kode ing kuliah iki - biasane gambar lan penjelasan. Dadi, ayo :) Kaya sing wis dingerteni, ing njero ArrayList'a ana array biasa, sing dadi panyimpenan data. Ing kasus paling, kita ora nemtokake ukuran pas dhaftar. Nanging array internal kudu sawetara ukuran! Iki bener. Ukuran standar yaiku [10] .
public static void main(String[] args) {
   ArrayList<Car> cars = new ArrayList<>();
}
Dhaptar Array Kerja ing gambar - 2Pisanan, ayo goleki apa sing ditambahake unsur anyar. Kaping pisanan, priksa manawa ana cukup ruang ing array internal lan manawa ana unsur liyane sing cocog. Yen ana papan, unsur anyar ditambahake ing pungkasan dhaptar. Nalika kita ngomong "nganti pungkasan", kita ora ateges sel pungkasan saka array (sing bakal aneh). Iki nuduhake sel ing jejere unsur saiki pungkasan. Indeks kasebut bakal padha karo cars.size(). Daftar kita saiki kosong ( cars.size() = 0). Mulane, unsur anyar bakal ditambahake menyang sel kanthi indeks 0.
ArrayList<Car> cars = new ArrayList<>();
Car ferrari = new Car("Ferrari 360 Spider");
cars.add(ferrari);
Dhaptar Array Kerja ing gambar - 3Kabeh wis jelas ing kene. Apa sing bakal kelakon yen selipan ditindakake ing tengah, yaiku, ing antarane sawetara unsur?
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, которая уже занята
}
Maneh, pisanan mriksa kanggo ndeleng yen ana cukup spasi ing array. Yen ana cukup spasi, unsur dipindhah menyang sisih tengen wiwit saka sel ing ngendi kita masang unsur anyar. Kita nempel menyang sel kanthi indeks 1. Yaiku, unsur saka sel 3 disalin menyang sel 4, unsur 2 menyang sel 3, unsur 1 menyang sel 2. Dhaptar Array Kerja ing gambar - 4Sawisé iku, unsur anyar kita ditempelake menyang panggonan. Unsur sadurunge ( bugatti) wis disalin saka ing kono menyang lokasi anyar. Dhaptar Array Kerja ing gambar - 5Saiki ayo ngerteni kepiye proses iki bakal kedadeyan yen ora ana papan kanggo selipan ing array. Dhaptar Array Kerja ing gambar - 6Kaping pisanan, mesthi, priksa manawa ana papan sing cukup. Yen dadi metu sing ana ora cukup papan, ArrayListUploaded anyar ukuran (ukuran OldArray * 1,5) + 1 digawe nang 'a. Ing kasus kita, Uploaded anyar bakal duwe ukuran 16 sel. Kabeh unsur saiki bakal langsung disalin ing kono. ArrayList dianggo ing gambar - 7Larik lawas bakal dibusak dening tukang sampah, lan mung anyar, ditambahi bakal tetep. Saiki ana ruang bebas kanggo unsur anyar. Kita nempelake menyang sel 3, sing dikuwasani. Saiki prosedur akrab diwiwiti. Kabeh unsur sing diwiwiti ing indeks 3 dipindhah siji sel menyang sisih tengen, lan unsur anyar ditambahake kanthi tenang. Dhaptar Array Kerja ing gambar - 8Lan saiki sisipan wis sukses! We diurutake metu sisipan. Saiki ayo ngomong babagan mbusak unsur . Nalika sampeyan ngelingi, nalika nggarap array, kita nemoni masalah: nalika mbusak, "bolongan" tetep ana. Solusi mung kanggo ngalih unsur ngiwa saben-saben padha dibusak, lan sampeyan kudu nulis kode kanggo shift dhewe. ArrayListdianggo ing asas padha, nanging ing mekanisme iki wis dipun ginakaken kanthi otomatis. Dhaptar Array Kerja ing gambar - 9Iki katon kaya: Dhaptar Array Kerja ing gambar - 10Lan ing pungkasan kita entuk asil sing dikarepake: Dhaptar Array Kerja ing gambar - 11Unsur kasebut lambokasil dibusak. Kene kita nindakake aman saka tengah. Cetha yen mbusak saka mburi dhaptar bakal luwih cepet, amarga unsur sing dipengini dibusak tanpa ngganti kabeh liyane. Ayo goleki maneh ukuran array internal lan panyimpenan ing memori. Ekspansi array minangka proses sing mbutuhake sumber daya tartamtu. Mulane, sampeyan ora kudu nggawe ArrayListkanthi ukuran standar yen sampeyan ngerti manawa bakal duwe paling ora 100 unsur. Nalika sampeyan bisa nglebokake unsur kaping 100, array internal bakal nggedhekake kaping 6 , saben wektu nransfer kabeh unsur.
  • saka 10 unsur nganti 16
  • saka 16 unsur nganti 25
  • saka 25 kanggo 38
  • saka 38 nganti 58
  • 58 nganti 88
  • saka 88 nganti 133 (miturut rumus (ukuran Array Lawas * 1.5) + 1)
Alami, iki cukup larang babagan sumber daya. Dadi, yen sampeyan wis ngerti sawetara (paling ora kira-kira) jumlah unsur sing disimpen, luwih becik nggawe dhaptar kanthi ukuran tartamtu:
ArrayList<Car> cars = new ArrayList<>(100);
Saiki susunan 100 unsur bakal langsung dialokasikan ing memori, sing bakal luwih efisien amarga sumber daya ora bakal boroske ing ekspansi. Ana uga sisih liyane saka duwit receh. Nalika obyek dibusak saka ArrayListUploaded internal, ukuran ora otomatis suda. Contone, kita duwe ArrayListUploaded internal 88 unsur, kang wis rampung kapenuhan: Dhaptar Array Kerja ing gambar - 13Sajrone operasi program, kita mbusak 77 unsur saka iku, lan mung 11 tetep ing: Apa Dhaptar Array Kerja ing gambar - 14sampeyan wis guessed apa masalahe? Panggunaan memori sing ora efisien, mesthi! Kita nggunakake mung 11 sel, nalika kita duwe memori diparengake kanggo 88 unsur - sing 8 kaping luwih saka kita kudu! Kanggo nindakake optimasi ing kasus iki, sampeyan bisa nggunakake cara kelas khusus ArrayList- trimToSize(). Iku "nglereni" dawa array internal kanggo jumlah unsur sing saiki disimpen ing. Dhaptar Array Kerja ing gambar - 15Saiki minangka akeh memori diparengake minangka needed! :)
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION