1. ArrayListklase

Ngayon ay tuklasin natin ang ArrayListklase. Ito ang una sa ilang klase na kilala bilang mga koleksyon . Sa Java, ang mga koleksyon ay napakalawak at kapaki-pakinabang na paksa na ang buong quest ng CodeGym ay nakatuon sa kanila.

Upang lubos na maunawaan kung paano nakaayos ang mga koleksyon at ang lahat ng kanilang mga nuances, kailangan mo munang matutunan ang OOP, mga interface, pamana, ang mga pangunahing kaalaman sa multithreading, at marami pang iba.

Kaya ngayon ay makikilala na lamang natin ang pinakasimpleng uri ng koleksyon. Ngunit sa isang malalim na antas upang maunawaan mo kung paano ito gamitin at kung paano ito gumagana. Ngayon, matugunan ang ArrayListkoleksyon .

Ang backstory

Magsisimula ako sa isang maliit na background. Talagang hindi nagustuhan ng mga programmer ang isang aspeto ng mga array: ang katotohanang hindi mababago ang kanilang laki. Paano kung kailangan mong mag-imbak ng tatlong higit pang mga elemento sa isang array, ngunit mayroon lamang isang walang laman na cell?

Ang tanging solusyon sa mga limitasyon sa espasyo ng isang array ay ang lumikha ng napakalaking array upang ma-accommodate ang lahat ng elementong maaaring kailanganin mong iimbak. Ngunit ito ay karaniwang isang pag-aaksaya ng memorya. Kung ang isang array ay karaniwang naglalaman ng dalawa o tatlong elemento ngunit mayroong kahit isang maliit na pagkakataon na kakailanganin itong mag-imbak ng 100 sa mga ito, kung gayon kinakailangan na lumikha ng isang array na may kapasidad na mag-imbak ng 100.

Kaya ano ang naisip ng mga programmer? Isinulat nila ang ArrayListklase, na ginawa ang parehong gawain tulad ng Arrayklase, ngunit nababago.

klase ng ArrayList

Ang pangalan ng ArrayListklase ay nabuo mula sa dalawang salita: Array + List. Arrayay isang array at Listisang listahan.

Ang bawat ArrayListbagay ay naglalaman ng isang ordinaryong hanay ng mga elemento. Kapag nagbasa ka ng mga elemento mula sa isang ArrayList, kinukuha ng object ang mga ito mula sa panloob na hanay nito. Kapag nagsusulat ka ng mga elemento, isinusulat nito ang mga ito sa panloob na hanay.

Ang klase ng ArrayList ay kulang sa lahat ng mga disadvantages na mayroon ang mga array. Alam nito kung paano:

  • Mag-imbak ng mga elemento ng isang partikular na uri
  • Dynamically resize ang listahan
  • Magdagdag ng mga elemento sa dulo ng listahan
  • Maglagay ng mga elemento sa simula o gitna ng listahan
  • Alisin ang mga elemento mula sa kahit saan sa listahan

Para sa higit pang mga detalye, tingnan sa ibaba:


2. Paglikha ng isang ArrayListbagay

Upang lumikha ng isang ArrayListbagay, kailangan mong magsulat ng code tulad nito:

ArrayList<TypeParameter> name = new ArrayList<TypeParameter>();

Nasaan ArrayListang uri/klase ng koleksyon, TypeParameterang uri ng mga elementong nakaimbak sa ArrayListkoleksyon, at namepangalan ng ArrayList<TypeParameter>variable.

Ang namevariable ay may generic na uri. Binubuo ito ng dalawang uri: unang ipinahiwatig ang uri ng koleksyon, at pagkatapos ay ginagamit ang mga anggulong bracket upang ipahiwatig ang uri ng mga elementong nakaimbak sa koleksyon.

Mga halimbawa:

Code Paglalarawan
ArrayList<Integer> list = new ArrayList<Integer>();
Listahan ng mga integer
ArrayList<String> list = new ArrayList<String>();
Listahan ng mga string
ArrayList<Double> list = new ArrayList<Double>();
Listahan ng mga totoong numero

Hindi tulad ng mga array, hindi maaaring mag-imbak ang mga koleksyon ng mga primitive na uri, mga uri lamang ng reference . Kaya kung kailangan mo ng koleksyon ng ints, gamitin ang Integerklase ng wrapper sa halip.


3. Mga operasyon na may isangArrayList

Sa una, ang haba ng bagong likhang listahan ay zero, dahil naglalaman ito ng 0 elemento. Kung magdaragdag ka ng isang elemento sa listahan, tataas ang haba nito ng 1. Kung aalisin mo ang idinagdag na elemento, ang haba ay bababa pabalik sa zero.

Ang sumusunod na talahanayan ay maaaring magturo sa iyo ng higit pa tungkol sa mga pamamaraan ng ArrayListklase:

Paraan Paglalarawan
void add(Type value)
Idinaragdag ang naipasa na elemento sa listahan
void add(int index, Type value)
Nagdaragdag ng elemento sa isang partikular na lokasyon sa listahan.
Type get(int index)
Ibinabalik ang elemento kung saan ang index ayindex
void set(int index, Type value)
Nagtatalaga valuesa elemento na ang index ayindex
Type remove(int index)
Tinatanggal ang elemento na ang index ay index. Ibinabalik ang inalis na elemento.
Type remove(Type value)
Tinatanggal ang elementong ipinapasa mo sa pamamaraan. Kung mayroong higit sa isang elemento, ang una ay aalisin.
void clear()
Nililinis ang listahan, ibig sabihin, inaalis ang lahat ng elemento sa listahan.
boolean contains(Type value)
Sinusuri kung naglalaman ang listahan ng value.
boolean isEmpty()
Sinusuri kung walang laman ang listahan o wala. Sa madaling salita, kung ang haba ng listahan ay zero.
int size()
Ibinabalik ang laki ng listahan, ibig sabihin, ang bilang ng mga elemento sa listahan.
Type[] toArray(Type[] array)
Nagbabalik ng array na naglalaman ng mga elemento ng listahan.
Kailangan mong ipasa ang array sa pamamaraan.

Hinahayaan ka ng mga paraang ito na gawin ang halos anumang bagay na maaari mong gawin sa listahan: magpalit ng mga elemento, magdagdag ng mga elemento, at mag-alis ng mga elemento. Maaari mong i-clear ang listahan gamit ang isang command, o kahit na i-convert ang listahan sa isang array.



4. Paghahambing ng ArrayListatArray

Sa palagay ko ay hindi natin maiiwasan ang paghahambing ArrayListat isang array.

Mayroon lamang 4 na pagkilos na maaari mong gawin sa mga array:

  • Gumawa ng array
  • Kumuha ng isang elemento sa pamamagitan ng index
  • Magtakda ng elemento sa pamamagitan ng index
  • Kunin ang haba ng array

Narito ang mga operasyong ito habang nalalapat ang mga ito sa isang array at isang ArrayList:

Array ArrayList
String[] array = new String[10];
ArrayList<String> list = new  ArrayList<String>();
String s = array[0];
String s = list.get(0);
array[0] = "Bye";
list.set(0, "Bye");
int count = array.length;
int count = list.size();

Ihambing natin kung paano ArrayListgumagana ang isang kumpara sa kung paano gumagana ang isang array. Halimbawa, ipatupad natin ang gawaing ito: "basahin ang 10 string mula sa keyboard at ipakita ang mga ito sa screen sa reverse order"

Gamit ang Array Gamit ang ArrayList
Scanner console = new Scanner(System.in);

// Read strings from the keyboard
String[] list = new String[10];

for (int i = 0; i < list.length; i++)
{
    String s = console.nextLine();
    list[i] = s;
}

// Display the contents of the array on the screen
for (int i = 0; i < list.length; i++)
{
    int j = list.length - i - 1;
    System.out.println(list[j]);
}
Scanner console = new Scanner(System.in);

// Read strings from the keyboard
ArrayList<String> list = new ArrayList<String>();

for (int i = 0; i < 10; i++)
{
    String s = console.nextLine();
    list.add(s);
}

// Display the contents of the collection on the screen
for (int i = 0; i < list.size(); i++)
{
    int j = list.size() - i - 1;
    System.out.println(list.get(j));
}

Ang pagkakatulad ay malinaw. Ang lahat ay kahit papaano ay mas maikli at mas malinaw para sa mga array. Ngunit ArrayListhindi rin mahirap: upang makakuha ng isang elemento, ginagamit namin ang get()pamamaraan; upang baguhin ang isang elemento, ang set()pamamaraan; upang makuha ang haba ng listahan, ang size()pamamaraan.

Kaya bakit ginagamit ng mga programmer ang ArrayListklase?

Ang buong punto, siyempre, ay ang lahat ng iba pang mga pamamaraan na wala sa mga ordinaryong array:

  • Magdagdag ng elemento sa listahan
  • Magdagdag ng elemento sa gitna ng listahan
  • Maghanap ng isang elemento sa listahan
  • Pag-alis ng elemento mula sa isang listahan