JavaRush /Java Blog /Random-TK /Java-da ýygyndylar | Java ýygyndylary

Java-da ýygyndylar | Java ýygyndylary

Toparda çap edildi
Salam! Geçen birnäçe sapakda ArrayList-i özleşdirmekde uly üstünlikler gazandyk. Şeýle-de bolsa, bu döwürde diňe iň ýönekeý amallary ýerine ýetirdik: pozmak, salmak, konsola çykarmak. Elbetde, bu ArrayList ulanylanda işläp düzüjileriň ýüzbe-ýüz bolýan meseleleriniň sanawynyň soňy däl . Toplumlar we massiwler synpy barada leksiýa ýadyňyzdamy ? Java-yň döredijileri tarapyndan programmaçylar massiwler bilen işleşende ýüze çykýan umumy meseleleri çözmek üçin ýörite işlenip düzüldi. ArrayList hakda näme ? Elbetde, onuň üçin adaty meseleleriň sanawy hem bar. Bularyň hemmesi aýratyn synpda amala aşyryldymy ýa-da her gezek islenýän gylyk-häsiýeti el bilen ýazmaly bolarysmy? Elbetde, hemme zady özüň ýazmagyň zerurlygy ýok. Java-da kolleksiýalary ulananyňyzda iň köp ýaýran amallar ýörite statiki synp ýygyndylarynda eýýäm amala aşyryldy. Synp ýygyndylary - 1

Java-da ýygyndylar

“Kolleksiýalar” Java-daky birnäçe maglumat gurluşlarynyň umumy ady. Maglumatlar dürli usullar bilen saklanyp bilner. Şu wagta çenli diňe bir massiwde saklanýan “ArrayList” synpyny öwrendik . Theygyndylaryň galanlary bilen soňrak tanyşarys. Kolleksiýalar synpynyň diňe bir “ArrayList” bilen däl, eýsem Java-daky beýleki kolleksiýalar bilen işlemek üçin döredilendigine düşünmek ýeterlikdir (şonuň üçin aslynda onuň ady). Şeýlelik bilen, “ArrayList” bilen işleýän wagtyňyz, Kolleksiýalar synpy haýsy meseleleri çözmäge mümkinçilik berýär? Birinjisi we iň düşnükli görnüşi. Toplumlar boýunça leksiýada sanlar bilen bir mysala göz aýladyk, indi bolsa setirler bilen bir mysala seredeliň. Kolleksiýalaryň mazmunyny tertiplemek üçin Kolleksiýalar synpy aşakdaky usuly ýerine ýetirýär sort():
public class Main {

   public static void main(java.lang.String[] args) {

       String mercury = new String("Mercury");
       String venus = new String("Venus");
       String earth = new String("Earth");
       String mars = new String("Mars");
       String jupiter = new String("Jupiter");
       String saturn = new String("Saturn");
       String uranus = new String("Uranus");
       String neptune = new String("Neptune");

       ArrayList<String> solarSystem = new ArrayList<>(Arrays.asList(mercury, venus, earth, mars,
               jupiter, saturn, uranus, neptune));
       Collections.sort(solarSystem);
       System.out.println(solarSystem);

   }
}
Netije:

[Венера, Земля, Марс, Меркурий, Нептун, Сатурн, Уран, Юпитер]
Setirler elipbiý boýunça düzüldi! Näme üçin elipbiý tertibinde? Synp Stringsetirleriň biri-biri bilen deňeşdirilişini takyk kesgitlemek üçin düzülendir (takyk elipbiý boýunça). Özüňizi döredjek sapaklaryňyz üçin deňeşdirme mehanizmini durmuşa geçirip bilersiňiz, ýöne bu barada beýleki leksiýalarda gürleşeris. Mundan başga-da, Kolleksiýalar synpy a-da iň az we iň ýokary elementi tapmaga mümkinçilik berýär ArrayList. min()Bu usullar we usullar arkaly amala aşyrylýar max():
public static void main(java.lang.String[] args) {

   ArrayList<Integer> numbers = new ArrayList<>(Arrays.asList(1,2,3,4,5,6,7));
   System.out.println(Collections.max(numbers));
   System.out.println(Collections.min(numbers));

}
Netije:

7
1
Bu, elbetde, ähli elementlerden geçip, iň uly / kiçi elementi gözlemek üçin el bilen kod ýazmakdan has amatlydyr :) Anotherene bir peýdaly usul reverse(). Elementleriň ters tertipde bolmagy üçin sanawy “tersine” etmeli bolsak, muny nädip ederdik? Şeýle algoritmi özüňiz ýazmak beýle aňsat bolmazdy :) Bagtymyza, usul reverse()muny nädip etmelidigini eýýäm bilýär. Mysal üçin, usulyň planetalarymyzy elipbiý tertibinde nähili tertipländigini halamaýarys sort()we tertibi tersine - Z-den A-a üýtgetmek isleýäris:
public class Main {

   public static void main(java.lang.String[] args) {

       String mercury = new String("Mercury");
       String venus = new String("Venus");
       String earth = new String("Earth");
       String mars = new String("Mars");
       String jupiter = new String("Jupiter");
       String saturn = new String("Saturn");
       String uranus = new String("Uranus");
       String neptune = new String("Neptune");

       ArrayList<String> solarSystem = new ArrayList<>(Arrays.asList(mercury, venus, earth, mars,
               jupiter, saturn, uranus, neptune));
       Collections.sort(solarSystem);
       Collections.reverse(solarSystem);
       System.out.println(solarSystem);

   }
}
Netije:

[Юпитер, Уран, Сатурн, Нептун, Меркурий, Марс, Земля, Венера]
Theeri gelende aýtsak, bu ýerde köplenç tertipleşdirmek, elementleriň tertibi we ş.m. hakda gürleşýäris. Biziň wezipämiz tersine bolsa näme etmeli? Mysal üçin, lotereýa mehanizmini durmuşa geçirmäge synanyşýarys. Ekranda bir gezek görünmeli makara 100 san goşduk. Biletdäki ähli sanlary kesen ilkinji gatnaşyjy ýeňýär. Usuly ulanyp, şeýle mehanizmi durmuşa geçirmek gaty aňsat shuffle():
public class Main {

   public static void main(java.lang.String[] args) {

       ArrayList<Integer> lottery = new ArrayList<>(100);
       for (int i = 1; i <= 100; i++) {

           lottery.add(i);//add numbers from 1 to 100 to the drum
       }

       Collections.shuffle(lottery);//mix
       System.out.println("Attention! The first 10 numbers appear from the drum!");
       for (int i = 0; i < 10; i++) {

           System.out.println(lottery.get(i));
       }

   }
}
Netije:

Внимание! Из барабана появляются первые 10 чисел!
32
61
4
81
25
8
66
35
42
71
Bu ýönekeý! Mesele çözüldi we oýun eserimiz ýazyldy :) Indi başga bir ýagdaýy göz öňüne getireliň. solarSystemOzallar sanawda ýerleşdirilen planetalar bilen sanaw döredipdik . Bir zat bolmasa, hemmämize laýyk gelýän ýaly: ondan elementleri aýyryp, täzelerini goşup bilersiňiz! Elbetde, bu biziň garaşýan häsiýetimiz däl: programmamyzdaky gün ulgamy üýtgewsiz ýagdaýda bolmaly. Kolleksiýalar synpynda gaty gyzykly usul bar - unmodifiableList(). Berlen sanawyň üýtgewsiz görnüşini döredýär. Oňa bir element goşmak ýa-da aýyrmak mümkin bolmaz. Gün ulgamynyň planetalarynyň sanawy barada aýdylanda, bu bize gerek zat!
public class Main {

   public static void main(java.lang.String[] args) {

       String mercury = new String("Mercury");
       String venus = new String("Venus");
       String earth = new String("Earth");
       String mars = new String("Mars");
       String jupiter = new String("Jupiter");
       String saturn = new String("Saturn");
       String uranus = new String("Uranus");
       String neptune = new String("Neptune");

       List<String> solarSystem = Collections.unmodifiableList(new ArrayList<>(Arrays.asList(mercury, venus, earth, mars,
               jupiter, saturn, uranus, neptune)));
       solarSystem.add("Pluto");//try to add a new element
   }
}

Exception in thread "main" java.lang.UnsupportedOperationException
	at java.util.Collections$UnmodifiableCollection.add(Collections.java:1075)
	at Main.main(Main.java:21)
Roralňyşlyk: solarSystemIndi hiç zat goşup bilmersiňiz! Bu ýagdaýda üns bermeli ýeke-täk zadyňyz, üýtgeýjiniň görnüşi bolmaly List<>däl-de bolmaly ArrayList<>(bu usul sanawlaryň ähli görnüşlerine mahsus bolan bu görnüşdäki obýekti yzyna gaýtaryp berýär). Iş wagtynda bolup biläýjek başga bir umumy ýagdaý, programmistiň nädogry tertipde elementleri goşmagydyr. Eger şeýle bolan bolsa we Merkuri we Neptun garaşylmadyk ýerleri üýtgeden bolsa, aşakdaky usul bize bu ýalňyşlygy düzetmäge kömek eder swap():
public class Main {

   public static void main(java.lang.String[] args) {

       String mercury = new String("Mercury");
       String venus = new String("Venus");
       String earth = new String("Earth");
       String mars = new String("Mars");
       String jupiter = new String("Jupiter");
       String saturn = new String("Saturn");
       String uranus = new String("Uranus");
       String neptune = new String("Neptune");

       ArrayList<String> solarSystem = new ArrayList<>(Arrays.asList(neptune, venus, earth, mars
       , jupiter, saturn, uranus, mercury));// wrong planet order
       System.out.println(solarSystem);

       Collections.swap(solarSystem, solarSystem.indexOf(mercury), solarSystem.indexOf(neptune));
       System.out.println(solarSystem);

   }
}
Sanawymyzy usula swap(), şeýle hem çalşylmaly iki elementiň görkezijilerine geçirdik. Üns beriň: usul baglanyşyklar bilen däl-de, indeksler bilen işleýär. Şonuň üçin bu ýerde bir usul gerekdi ArrayList.indexOf(). Netije:

[Нептун, Венера, Земля, Марс, Юпитер, Сатурн, Уран, Меркурий]

[Меркурий, Венера, Земля, Марс, Юпитер, Сатурн, Уран, Нептун]
Ahyrynda, gaty gyzykly usul bilen tanyşalyň - disjoint(). Iki kolleksiýanyň çatrygynyň bardygyny ýa-da iň bolmanda bir meňzeş elementiň bardygyny barlaýar. Notok bolsa, gaýdyp gelýär true, hawa bolsa gaýdyp gelýär false.
public class Main {

   public static void main(java.lang.String[] args) {

       String mercury = new String("Mercury");
       String venus = new String("Venus");
       String earth = new String("Earth");
       String mars = new String("Mars");
       String jupiter = new String("Jupiter");
       String saturn = new String("Saturn");
       String uranus = new String("Uranus");
       String neptune = new String("Neptune");

       ArrayList<String> solarSystemPart1 = new ArrayList<>(Arrays.asList(mercury, venus, earth, mars));
       ArrayList<String> solarSystemPart2 = new ArrayList<>(Arrays.asList(jupiter, saturn, uranus, neptune));

       System.out.println(Collections.disjoint(solarSystemPart1, solarSystemPart2));

   }
}
Görşüňiz ýaly, iki sanawymyzdaky elementler düýbünden başga, şonuň üçin programma çykýar true. Bu şeýle gyzykly we örän peýdaly synp. Edil şonuň ýaly-da Arrays, bize başga zatlara ünsi jemlemäge mümkinçilik berýän köp sanly adaty iş edýär. Bu hakda Oracle resminamalarynda okaň , ol ýerde başga usullar bar.
Teswirler
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION