JavaRush /Java Blog /Random-TK /Java-da ArrayList synpy

Java-da ArrayList synpy

Toparda çap edildi
Salam! Öňki leksiýalarda massiw ýaly maglumat gurluşyny jikme-jik gözden geçirdik we olar bilen işlemegiň umumy mysallaryna göz aýladyk. Emma bu maglumat gurluşynyň birnäçe kemçilikleri bar. Java-da olara jogap ArrayList-iň peýda bolmagydy. Mümkin boldugyça ýönekeý söz bilen aýdylanda, Java-daky ArrayList köp täze aýratynlyklary bolan “kämilleşdirilen” massiwdir.Synp ArrayList - 1

Java Arraylist adaty massiwlerden nähili tapawutlanýar?

Umuman aýdanyňda, massiwler gaty amatly we öňem belläp geçişiňiz ýaly, olar bilen köp zatlar edip bilersiňiz :) Şeýle-de bolsa, massiwleriň hem birnäçe kemçilikleri bar.
  • Çäklendirilen ululyk. Bir massiw döretmek tapgyrynda onuň içinde näçe öýjük bolmalydygyny bilmeli. Gerekli mukdarda baha bermeseňiz, ýeterlik ýer bolmaz. Eger oňa aşa baha berseňiz, massiw ýarym boş galar we bu beýle erbet däl. Galyberse-de, munuň üçin zerurlykdan has köp ýat bölüp berjekdigiňiz ýüze çykýar.
  • Bir massiwde element goşmak üçin usul ýok. Elmydama element goşmak isleýän öýjügiň indeksini aç-açan görkezmeli. Eger islenýän bahasy bolan eýýäm eýelenen öýjügi tötänleýin görkezseňiz, ol gaýtadan ýazylar.
  • Bir elementi aýyrmagyň usullary ýok. Bahasy diňe “nol” bolup biler.
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 + '\'' +
               '}';
   }
}
Netije:

[Cat{name='Томас'}, null, Cat{name='Фorпп Маркович'}]
Bu kemçilikleriň hemmesini ArrayList ulanyp ýok edip bolýar. Örän ýönekeý döredildi:
ArrayList<Cat> cats = new ArrayList<Cat>();
Indi obýektleri saklamak üçin sanaw düzdük Cat. Üns beriň:“ArrayList” -iň ululygyny kesgitlemeýäris, sebäbi awtomatiki usulda giňelýär. Bu nädip mümkin? Ansatlyk bilen. Siz geň galarsyňyz, ýöne ArrayList adaty bir massiw esaslanýar :) Hawa, onuň içinde elementlerimiz saklanýan bir massiw bar. Emma “ArrayList” bilen işlemek üçin ýörite mehanizm bar:
  • Bu içerki massiw doly bolanda, “ArrayList” öz içinde täze massiw döredýär. Onuň ululygy = (köne massiwiň ululygy * 1.5) +1.
  • Datahli maglumatlar köne massiwden täzesine göçürilýär
  • Köne massiw hapa ýygnaýjy tarapyndan aýrylýar.
Bu mehanizmiň kömegi bilen, “ArrayList” (bir massiwden tapawutlylykda) täze element goşmak usulyny ulanýar. Bu usul add().
public static void main(String[] args) {

   ArrayList<Cat> cats = new ArrayList<Cat>();
   cats.add(new Cat("Hippopotamus"));
}
Sanawyň soňuna täze element goşuldy. Indi suw joşmak howpy ýok, şonuň üçin bu mehanizm doly howpsuz. Theeri gelende aýtsak, “ArrayList” diňe bir indeks boýunça bir obýekt gözläp bilmeýär, tersine - obýektiň görkezijisini ArrayList-de tapyp biler! Munuň üçin usuly ýerine ýetirýär indexOf(): Biz oňa islenýän obýekte baglanyşyk berýäris we indexOf()indeksini bize gaýtaryp berýär:
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);
}
Netije:

0
Dogry, obýekt thomasaslynda öýjükde saklanýar 0. Toplumlaryň diňe bir kemçilikleri däl, şübhesiz artykmaçlyklary hem bar. Olaryň biri indeks boýunça element gözleýär. Indeks, ýagny ýatda belli bir adrese salgylanýandygymyz sebäpli, şeýle yzygiderli gözleg gaty çalt. Java-da ArrayList hem muny edip biler! Munuň üçin bir usuly ýerine ýetirýär 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);
}
Netije:

Cat{name='Бегемот'}
Şeýle hem, “ArrayList” -iň belli bir obýektiň bardygyny ýa-da ýokdugyny aňsatlyk bilen bilip bilersiňiz. Bu usul ulanylýar 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));
}
Usul, elementiň ArrayList-iň içerki massiwinde bardygyny ýa-da ýokdugyny barlaýar we netijäni görnüşde booleanýa- trueda görnüşinde yzyna berýär false. Netije:

false
Goýmak barada başga bir möhüm zat. “ArrayList” size diňe bir massiwiň ahyrynda däl, eýsem indeks boýunça islendik öýjüge hem maglumatlary girizmäge mümkinçilik berýär. Munuň iki usuly bar:
  • add(int index, Cat element)
  • set(int index, Cat element)
Ikisine-de, salmak isleýän öýjügiň indeksini we obýektiň özüne baglanyşyk berýärsiňiz. Tapawut, set()öýjükde saklanýan köne bahany gaýtadan ýazmakdyr. Ilki bilen massiwiň ahyryna çenli add()ähli elementleri üýtgetmek we boş öýjüge zerur obýekti goşmak. [index]Ine bir mysal:
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());
}
Netije:

[[Cat{name='Томас'}, Cat{name='Бегемот'}]
[Cat{name='Фorпп Маркович'}, Cat{name='Бегемот'}]
2 pişigiň sanawy bardy, usuly bilen set()öýjüge saldyk 0. Netijede, bu öýjükde saklanýan köne baha täzesi bilen çalşyryldy.
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());
}
Itöne add()başgaça işledi. Thehli elementleri sag tarapa geçirdi we täze bahany öýjüge ýazdy 0. Netije:

[Cat{name='Томас'}, Cat{name='Бегемот'}]
[Cat{name='Фorпп Маркович'}, Cat{name='Томас'}, Cat{name='Бегемот'}]
Sanawy doly arassalamak üçin usuly ulanyň 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());
}
Netije:

[]
Contenthli mazmun sanawdan aýryldy. Theeri gelende aýtsak, üns beriň: massiwlerden tapawutlylykda, ArrayList-de toString () usuly ýok edilýär we sanawy derrew setir görnüşinde görkezýär. Toplumlar üçin munuň üçin “Arrays” synpyny ulanmaly bolduk. “Arrays” -y ýadymyzdan çykaranymyz üçin: “Java” -da bir massiw bilen “ArrayList” -iň arasynda aňsatlyk bilen “geçip”, ýagny birini beýlekisine öwrüp bilersiňiz. “Arrays” synpynyň munuň üçin usuly bar, “Arrays.asList” (). Onuň kömegi bilen, massiwiň mazmunyny sanaw hökmünde alýarys we ony “ArrayList” -iň konstruktoryna geçirýäris:
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);
}
Netije:

[Cat{name='Томас'}, Cat{name='Бегемот'}, Cat{name='Фorпп Маркович'}, Cat{name='Пушок'}]
Munuň tersini edip bilersiňiz - ArrayList obýektinden bir massiw alyň. Munuň üçin toArray () usulyny ulanyň:
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));
}
Üns beriň: boş massiwden toArray () usulyna geçdik. Aalňyşlyk däl. “ArrayList” synpynyň içinde bu usul boş massiwden geçmek işini ýokarlandyrýan görnüşde amala aşyrylýar. Häzirlikçe muny diňe geljek üçin ýadyňyzdan çykarmaň (ýöne belli bir ululygy hem geçirip bilersiňiz, ol işlär). Ululygy barada. Sanawyň häzirki ululygyny usul bilen tapyp bilersiňiz 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());
}
Bu ýerde düşünmek möhümdir, lengthmassiw häsiýetinden tapawutlylykda, ArrayList.size () usuly başlangyç kuwwaty däl-de, elementleriň sanyny takyk görkezýär, sebäbi ArrayList döredilende kesgitlemeýäris. .Eri gelende aýtsak, muny görkezmek mümkin. “ArrayList” -iň degişli konstruktory bar. Emma täze elementleri goşmak nukdaýnazaryndan özüni alyp barşy üýtgemez:
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());
}
Konsol çykyşy:

4
2 elementli sanaw döretdik, ýöne gerek bolanda aňsatlyk bilen giňeldi. Anotherene bir zat, başda gaty kiçi sanaw döreden bolsak, giňeltmek amalyny ýygy-ýygydan amala aşyrmaly bolar we bu belli bir mukdarda serişde sarp eder. Bu leksiýada “ArrayList” -den elementleri aýyrmak prosesi barada zordan durup geçdik. Elbetde, bu ýatdan çykmak bilen baglanyşykly däl. Bu mowzuk aýratyn leksiýa bölünipdi, mundan beýläk okap bilersiňiz :)
Teswirler
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION