JavaRush /Blog Jawa /Random-JV /ArrayList kelas ing Jawa

ArrayList kelas ing Jawa

Diterbitake ing grup
Hello! Ing kuliah sadurunge, kita nliti kanthi rinci babagan struktur data kaya array lan ndeleng conto umum nggarap. Nanging struktur data iki nduweni sawetara kekurangan. Jawaban kanggo wong-wong mau ing Jawa yaiku tampilan ArrayList. Kanggo nyelehake kanthi gampang, ArrayList ing Jawa minangka array sing "diupgrade" kanthi akeh fitur anyar.Dhaptar Array Kelas - 1

Kepiye carane Java Arraylist beda karo array biasa?

Umumé, array cukup trep lan, kaya sing wis dingerteni, sampeyan bisa nindakake akeh perkara karo dheweke :) Nanging, array uga duwe sawetara kekurangan.
  • ukuran winates. Sampeyan kudu ngerti wis ing tataran nggawe array carane akeh sel kudu ngemot. Yen sampeyan ngremehake jumlah sing dibutuhake, ora bakal ana papan sing cukup. Yen sampeyan overestimate, array bakal tetep setengah kosong, lan iku ora dadi ala. Sawise kabeh, ternyata sampeyan uga bakal nyedhiyakake memori luwih akeh tinimbang sing dibutuhake.
  • Array ora duwe cara kanggo nambah unsur. Sampeyan mesthi kudu kanthi tegas nemtokake indeks sel sing pengin ditambahake unsur kasebut. Yen sampeyan ora sengaja nemtokake sel sing wis dikuwasani kanthi nilai sing dikarepake, sel kasebut bakal ditimpa.
  • Ora ana cara kanggo mbusak unsur. Nilai mung bisa "nol".
public class Cat {

   private String name;

   public Cat(String name) {
       this.name = name;
   }

   public static void main(String[] args) {

       Cat[] cats = new Cat[3];
       cats[0] = new Cat("Thomas");
       cats[1] = new Cat("Hippopotamus");
       cats[2] = new Cat("Philip Markovich");

       cats[1] = null;



       System.out.println(Arrays.toString(cats));
   }

   @Override
   public String toString() {
       return "Cat{" +
               "name='" + name + '\'' +
               '}';
   }
}
Kesimpulan:

[Cat{name='Томас'}, null, Cat{name='Фorпп Маркович'}]
Kabeh kekurangan kasebut bisa diilangi nggunakake ArrayList. Iku digawe banget prasaja:
ArrayList<Cat> cats = new ArrayList<Cat>();
Saiki kita wis nggawe dhaptar kanggo nyimpen obyek Cat. Pay manungsa waé:kita ora nemtokake ukuran ArrayList amarga bisa ditambahi kanthi otomatis. Carane iki bisa? Gampang. Sampeyan bakal kaget, nanging ArrayList adhedhasar array biasa :) Ya, ing njero ana array ing ngendi unsur kita disimpen. Nanging ArrayList duwe mekanisme khusus kanggo nggarap:
  • Nalika array internal iki kebak, ArrayList nggawe array anyar ing dhewe. Ukurane = (ukuran array lawas * 1.5) +1.
  • Kabeh data disalin saka larik lawas menyang sing anyar
  • Larik lawas dibusak dening tukang sampah.
Thanks kanggo mekanisme iki, ArrayList (minangka lawan saka array) ngleksanakake cara kanggo nambah unsur anyar. Iki minangka cara add().
public static void main(String[] args) {

   ArrayList<Cat> cats = new ArrayList<Cat>();
   cats.add(new Cat("Hippopotamus"));
}
Unsur anyar ditambahake ing pungkasan dhaptar. Saiki ora ana risiko kebanjiran, mula mekanisme iki pancen aman. Miturut cara, ArrayList ora mung bisa nggoleki obyek kanthi indeks, nanging uga kosok balene - bisa nemokake indeks obyek ing ArrayList kanthi referensi obyek kasebut! Kanggo nindakake iki, ngetrapake cara indexOf(): Kita mlebu link menyang obyek sing dikarepake, lan indexOf()ngasilake indeks kasebut marang kita:
public static void main(String[] args) {

   ArrayList<Cat> cats = new ArrayList<>();
   Cat thomas = new Cat("Thomas");
   Cat behemoth = new Cat("Hippopotamus");
   Cat philipp = new Cat("Philip Markovich");
   Cat pushok = new Cat("Fluff");

   cats.add(thomas);
   cats.add(behemoth);
   cats.add(philipp);
   cats.add(pushok);

   int thomasIndex = cats.indexOf(thomas);
   System.out.println(thomasIndex);
}
Kesimpulan:

0
Bener, obyek kasebut thomasdisimpen ing sel 0. Array ora mung duwe kekurangan, nanging uga duwe kaluwihan sing ora diragukan. Salah sijine yaiku nggoleki unsur kanthi indeks. Amarga kita nuduhake indeks, yaiku alamat tartamtu ing memori, telusuran array kasebut cepet banget. ArrayList ing Jawa uga bisa nindakake iki! Kanggo nindakake iki, nggunakake cara get():
public static void main(String[] args) {

   ArrayList<Cat> cats = new ArrayList<>();
   Cat thomas = new Cat("Thomas");
   Cat behemoth = new Cat("Hippopotamus");
   Cat philipp = new Cat("Philip Markovich");
   Cat pushok = new Cat("Fluff");

   cats.add(thomas);
   cats.add(behemoth);
   cats.add(philipp);
   cats.add(pushok);

   Cat secondCat = cats.get(1);

   System.out.println(secondCat);
}
Kesimpulan:

Cat{name='Бегемот'}
Uga, sampeyan bisa kanthi gampang ngerteni apa ArrayList ngemot obyek tartamtu utawa ora. Iki ditindakake kanthi nggunakake metode contains():
public static void main(String[] args) {

   ArrayList<Cat> cats = new ArrayList<>();
   Cat thomas = new Cat("Thomas");
   Cat behemoth = new Cat("Hippopotamus");
   Cat philipp = new Cat("Philip Markovich");
   Cat pushok = new Cat("Fluff");

   cats.add(thomas);
   cats.add(behemoth);
   cats.add(philipp);
   cats.add(pushok);

   cats.remove(pushok);
   System.out.println(cats.contains(pushok));
}
Cara mriksa manawa unsur kasebut ana ing array internal ArrayList, lan ngasilake asil ing wangun boolean- trueutawa false. Kesimpulan:

false
Lan bab penting liyane babagan selipan. ArrayList ngidini sampeyan nglebokake data ora mung ing pungkasan array, nanging uga menyang sel apa wae kanthi indeks. Wis rong cara kanggo iki:
  • add(int index, Cat element)
  • set(int index, Cat element)
Kanggo loro, sampeyan ngliwati indeks sel sing pengin dilebokake, lan link menyang obyek kasebut dhewe. Bentenipun punika paste liwat set()nimpa nilai lawas sing disimpen ing sel. Lan nglebokake liwat add()pisanan nggeser kabeh unsur wiwit saka [index]mburi Uploaded, lan nambah obyek sing perlu kanggo sel kosong asil. Iki contone:
public static void main(String[] args) {

   ArrayList<Cat> cats = new ArrayList<>();
   Cat thomas = new Cat("Thomas");
   Cat behemoth = new Cat("Hippopotamus");
   Cat philipp = new Cat("Philip Markovich");
   Cat pushok = new Cat("Fluff");

   cats.add(thomas);
   cats.add(behemoth);

   System.out.println(cats.toString());

   cats.set(0, philipp);//Now we have a list of 2 cats. We add the 3rd via set:

   System.out.println(cats.toString());
}
Kesimpulan:

[[Cat{name='Томас'}, Cat{name='Бегемот'}]
[Cat{name='Фorпп Маркович'}, Cat{name='Бегемот'}]
Kita duwe dhaptar 2 kucing, kita nglebokake siji liyane liwat metode set()menyang sel 0. Akibaté, nilai lawas sing disimpen ing sel iki diganti karo sing anyar.
public static void main(String[] args) {

   ArrayList<Cat> cats = new ArrayList<>();
   Cat thomas = new Cat("Thomas");
   Cat behemoth = new Cat("Hippopotamus");
   Cat philipp = new Cat("Philip Markovich");
   Cat pushok = new Cat("Fluff");

   cats.add(thomas);
   cats.add(behemoth);

   System.out.println(cats.toString());

   cats.add(0, philipp);//Now we have a list of 2 cats. Add the 3rd via add

   System.out.println(cats.toString());
}
Nanging add()kerjane beda. Dheweke mindhahake kabeh unsur ing sisih tengen banjur nulis nilai anyar menyang sel kasebut 0. Kesimpulan:

[Cat{name='Томас'}, Cat{name='Бегемот'}]
[Cat{name='Фorпп Маркович'}, Cat{name='Томас'}, Cat{name='Бегемот'}]
Kanggo mbusak dhaptar kanthi lengkap, gunakake cara clear():
public static void main(String[] args) {

   ArrayList<Cat> cats = new ArrayList<>();
   Cat thomas = new Cat("Thomas");
   Cat behemoth = new Cat("Hippopotamus");
   Cat philipp = new Cat("Philip Markovich");
   Cat pushok = new Cat("Fluff");

   cats.add(thomas);
   cats.add(behemoth);
   cats.add(philipp);
   cats.add(pushok);

   cats.clear();

   System.out.println(cats.toString());
}
Kesimpulan:

[]
Kabeh isi wis dibusak saka dhaftar. Miturut cara, mbayar manungsa waé: ora kaya array, ing ArrayList toString () cara ditimpa lan langsung nampilake dhaptar ing format string. Ing kasus array, kita kudu nggunakake kelas Arrays kanggo iki. Lan wiwit kita ngelingi Arrays: ing Jawa sampeyan bisa kanthi gampang "ngalih" antarane array lan ArrayList, yaiku, ngowahi siji menyang liyane. Kelas Arrays duwe cara kanggo iki, Arrays.asList (). Kanthi bantuan, kita entuk isi array minangka dhaptar lan ngirim menyang konstruktor ArrayList kita:
public static void main(String[] args) {

   Cat thomas = new Cat("Thomas");
   Cat behemoth = new Cat("Hippopotamus");
   Cat philipp = new Cat("Philip Markovich");
   Cat pushok = new Cat("Fluff");

   Cat[] catsArray = {thomas, behemoth, philipp, pushok};

   ArrayList<Cat> catsList = new ArrayList<>(Arrays.asList(catsArray));
   System.out.println(catsList);
}
Kesimpulan:

[Cat{name='Томас'}, Cat{name='Бегемот'}, Cat{name='Фorпп Маркович'}, Cat{name='Пушок'}]
Sampeyan bisa nindakake sebaliknya - entuk array saka obyek ArrayList. Kanggo nindakake iki, gunakake metode toArray():
public static void main(String[] args) {

   ArrayList<Cat> cats = new ArrayList<>();

   Cat thomas = new Cat("Thomas");
   Cat behemoth = new Cat("Hippopotamus");
   Cat philipp = new Cat("Philip Markovich");
   Cat pushok = new Cat("Fluff");

   cats.add(thomas);
   cats.add(behemoth);
   cats.add(philipp);
   cats.add(pushok);

   Cat[] catsArray = cats.toArray(new Cat[0]);

   System.out.println(Arrays.toString(catsArray));
}
Wigati dimangerteni: kita ngliwati array kosong menyang metode toArray (). Iku ora salah. Ing kelas ArrayList, metode iki diimplementasikake kanthi cara sing ngliwati array kosong nambah kinerja. Saiki, mung elinga iki kanggo masa depan (nanging sampeyan uga bisa nransfer ukuran tartamtu, bakal bisa digunakake). Ngomong babagan ukuran. Ukuran saiki dhaptar bisa ditemokake kanthi nggunakake metode size():
public static void main(String[] args) {

   ArrayList<Cat> cats = new ArrayList<>();


   Cat thomas = new Cat("Thomas");
   Cat behemoth = new Cat("Hippopotamus");
   Cat philipp = new Cat("Philip Markovich");
   Cat pushok = new Cat("Fluff");

   cats.add(thomas);
   cats.add(behemoth);
   cats.add(philipp);
   cats.add(pushok);

   System.out.println(cats.size());
}
Iku penting kanggo ngerti kene sing, Boten kados lengthproperty Uploaded, ArrayList.size () cara ngasilake persis nomer unsur, lan ora kapasitas dhisikan, amarga kita ora nemtokake nalika nggawe ArrayList. Miturut cara, iku umume bisa kanggo nunjukaké. ArrayList nduweni konstruktor sing cocog. Nanging prilaku ing babagan nambah unsur anyar ora bakal owah:
public static void main(String[] args) {

   ArrayList<Cat> cats = new ArrayList<>(2);//create an ArrayList with an initial capacity of 2


   Cat thomas = new Cat("Thomas");
   Cat behemoth = new Cat("Hippopotamus");
   Cat philipp = new Cat("Philip Markovich");
   Cat pushok = new Cat("Fluff");

   cats.add(thomas);
   cats.add(behemoth);
   cats.add(philipp);
   cats.add(pushok);

   System.out.println(cats.size());
}
Output konsol:

4
We digawe dhaftar karo 2 unsur, nanging nalika kita needed, iku gampang ditambahi. Liyane bab iku yen kita pisanan nggawe dhaftar cilik, iku kudu nindakake operasi expansion luwih asring, lan iki nggunakake jumlah tartamtu saka sumber daya. Ing kuliah iki, kita meh ora nyentuh babagan proses mbusak unsur saka ArrayList. Mesthi, iki ora amarga lali. Topik iki wis dipisahake dadi kuliah sing kapisah, sing bisa diwaca luwih lanjut :)
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION