JavaRush /Java Blog /Random-TK /Toplumlar we ulanylyşy

Toplumlar we ulanylyşy

Toparda çap edildi
Againene-de salam! :) Iň soňky sapakda, massiw (Java massiw) ýaly maglumat gurluşy bilen tanyşdyk , massiwleri döretmegi, maglumatlary doldurmagy öwrendik, şeýle hem olaryň ýatda saklanýandygyny öwrendik. Bu gün hakyky işde köplenç duşjak massiwler bilen işlemegiň käbir meselelerine we mysallaryna serederis. Mysal üçin, bu ýagdaýy göz öňüne getiriň: bizde tötänleýin tertipde ýazylan 10 sany san bar.
//array Java, example
int[] numbers = {167, -2, 16, 99, 26, 92, 43, -234, 35, 80};
Biziň wezipämiz, bu massiwi ýokarlanýan tertipde tertiplemek: kiçiden iň köp sanly. Ahyrynda şeýle bolmaly:
[-234, -2, 16, 26, 35, 43, 80, 92, 99, 167]
Muny nädip etmeli? Wezipe ähmiýetsiz, muny öň hiç haçan etmedik: / Pikirleriňiz barmy? Çaklamaga synanyşyň. Ine, edip biljek zadymyz, mysal üçin:
  • Toplumyň ähli elementlerini gaýtalaň. Her elementi indiki bilen deňeşdiriň ( [0]bilen [1], [1]bilen [2], [2]bilen [3]we ş.m.). Häzirki massiw elementi indiki elementden has uly bolsa, olary çalyşarys we indiki elemente geçeris. Notok bolsa, bolşy ýaly goýuň we dowam ediň.

  • Şeýlelik bilen, massiwiň elementlerinden ilkinji geçenden soň iň uly bahanyň (167) soňky öýjükde bolmagy kepillendirilýär.

  • Indi geliň, elementiň indeksinden başlap, [0]ýöne ahyrky elemente çenli (iň köp san eýýäm öz ýerinde) massiwiň ähli elementlerini täzeden öwreneliň we şol bir deňeşdirmeler we çalşyklar edeliň. 
    Netijede, ahyrky öýjükde ikinji iň ýokary baha bolar (99).

  • Geliň, bu eseri massiwde minus bir elementimiz bar bolsa birnäçe gezek gaýtalalyň.
Toplumlar we ulanylyşy - 2Bu pikiri orta atdyk, galan zat kod ýazmak. Bu şeýle bolar:
public class Main {

   public static void main(String[] args) {

       int[] numbers = {167, -2, 16, 99, 26, 92, 43, -234, 35, 80};

       for (int i = numbers.length - 1; i > 0; i--) {
           for (int j = 0; j < i; j++) {
           /* Compare the elements in pairs,
             if they are in the wrong order,
             then swap them */
               if (numbers[j] > numbers[j + 1]) {
                   int tmp = numbers[j];
                   numbers[j] = numbers[j + 1];
                   numbers[j + 1] = tmp;
               }
           }
       }

   }
}
Um ... Biraz çylşyrymly görünýär -_- Umumy iş prinsipi düşnükli bolsa-da, ýönekeý ýaly görünýän meseläni çözmek üçin gaty köp kod ýazmaly bolarsyňyz. Bolýar, belki özümize aşa baha berendiris? Wehtimal, biziň üstümize alan wezipe şu wagta çenli gaty kyn. Has ýönekeý bir zat etmäge synanyşalyň. Mysal üçin, sanlaryň birmeňzeş toplumyny alalyň.
int[] numbers = {167, -2, 16, 99, 26, 92, 43, -234, 35, 80};
Biziň wezipämiz, mazmunyny başga bir massiwde göçürmek.
int [] numbersCopy = new int[10];
Öňde bar bolan massiwler baradaky bilimleri ulanyp, muny nädip etjekdigiňizi pikir ediň? numbersMysal üçin, bir massiwden aýlanyp , elementlerini birin-birin ýazyp bilersiňiz numbersCopy:
public class Main {

   public static void main(String[] args) {

       int[] numbers = {167, -2, 16, 99, 26, 92, 43, -234, 35, 80};

       int [] numbersCopy = new int[10];

       for (int i = 0; i < numbers.length; i++) {

           numbersCopy[i] = numbers[i];
       }

   }
}
Dogrusy, biz muny köp ýa-da az etdik! Mesele çözülen ýaly, ýöne ýene: ýygy-ýygydan ýerine ýetirilmeli bolsa, kodda birmeňzeş aýlawlar bolar. Aslynda, bu we beýleki meseleler Java-yň döredijileri tarapyndan köpden bäri çözülipdi we bize “tekeri täzeden dikeltmek” we öz çözgüdi üçin käbir kod ýazmak zerurlygy ýok.

Java massiwleri

Javaörite Java synpy, massiwler bilen işleýän wagtyňyz adaty meseleleri çözmäge kömek eder - Arrays. Java programmistleriniň işlerinde iň köp duş gelýän meseleleri çözmek üçin bu klasa usullar goşuldy. Mysal üçin, özümiziň çözgüt tapmaga synanyşan massiwimizi tertiplemek meselesi bir setirde çözülip bilner:
public class Main {

   public static void main(String[] args) {

       int[] numbers = {167, -2, 16, 99, 26, 92, 43, -234, 35, 80};

       Arrays.sort(numbers);

       System.out.println(Arrays.toString(numbers));

   }
}
Usul Arrays.sort()massiwi tertipleýär. Mundan başga-da, içindäki algoritm muny ýazan kodumyzdan has täsirli edýär. Konsol çykyşy:

[-234, -2, 16, 26, 35, 43, 80, 92, 99, 167]
Üns beriň: massiwi setire öwürmek üçin başga bir synp usulyny ulandyk Arrays- Arrays.toString(). Java massiwleriniň özleri ýok toString(). Şonuň üçin ýazsaňyz
System.out.println(numbers.toString());
toString()synp usuly diýler Object. Massiwlerde çykyş şeýle bolar:

[I@4554617c
Indi netijäniň näme üçin beýle bolýandygy barada jikme-jik maglumat bermeris; esasy zat, munuň bize zerur zat däldigi. Emma Arrays.toString () islän zadymyzy etdi. Theeri gelende aýtsak, göçürmek bilen baglanyşykly meselämiz hem synpda aňsat çözülýär Arrays:
public class Main {

   public static void main(String[] args) {

       int[] numbers = {167, -2, 16, 99, 26, 92, 43, -234, 35, 80};

       int [] numbersCopy = Arrays.copyOf(numbers, numbers.length);
       System.out.println(Arrays.toString(numbersCopy));

   }
}
Usula, Arrays.copyOf()asyl massiwimizi (ondan bahalary göçürmeli) we maglumatlary göçürýän täze massiwiň uzynlygyny geçýäris. Bu ýagdaýda uzynlyk hökmünde görkezdik numbers.length, sebäbi Tutuş massiwini göçürmek isleýäris. Diňe ilkinji birnäçe elementi göçürmek islesek, täze massiw üçin has kiçi uzynlygy kesgitläp bileris:
public class Main {

   public static void main(String[] args) {

       int[] numbers = {167, -2, 16, 99, 26, 92, 43, -234, 35, 80};

       int [] numbersCopy = Arrays.copyOf(numbers, 4);
       System.out.println(Arrays.toString(numbersCopy));

   }
}
Bu ýerde täze massiwiň uzynlygyny 4 diýip kesgitledik. Şoňa laýyklykda numberstäze massiwde diňe ilkinji 4 element göçüriler. Konsol çykyşy:

[167, -2, 16, 99]
Theeri gelende aýtsak, bir massiwiň bir bölegini göçürmek zerur bolsa, başdan däl-de, “ortadan”, Arraysmuny hem edip bilersiňiz:
public class Main {

   public static void main(String[] args) {

       int[] numbers = {167, -2, 16, 99, 26, 92, 43, -234, 35, 80};

       int [] numbersCopy = Arrays.copyOfRange(numbers, 2,6);
       System.out.println(Arrays.toString(numbersCopy));

   }
}
Netije:

[16, 99, 26, 92]
Iki öýjükden ( öz içine alýan ) altydan ( öz içine almaýar ) sanlar täze massiwde göçürildi. Mundan başga-da, iki massiwi biri-biri bilen deňeşdirmeli bolmagymyz mümkin. Usulda bolşy ýaly toString(), massiwleriňem usuly ýok etmeýär equals(). Şonuň üçin olary şeýle deňeşdirmäge synanyşsak:
public class Main {

   public static void main(String[] args) {

       int[] numbers = {1, 2, 3};
       int[] numbers2 = {1, 2, 3};

       System.out.println(numbers.equals(numbers2));
   }
}
netijäni alýarys false. Object.equals()Galyberse-de, baglanyşyklary deňeşdirýän usul diýiler . Elbetde, olar başga! Emma baglanyşyklary däl-de, massiwleriň mazmunyny deňeşdirmeli. Synpda zerur zatlary ýerine ýetirýän Arraysartykmaç usul bar :equals()
public class Main {

   public static void main(String[] args) {

       int[] numbers = {1, 2, 3};
       int[] numbers2 = {1, 2, 3};

       System.out.println(Arrays.equals(numbers, numbers2));
   }
}
Netije:

true
Theeri gelende aýtsak, synp Arraysdiňe bir adaty massiwler bilen däl, eýsem iki ölçegli hem üstünlikli işleýär:
public class Main {

   public static void main(String[] args) {

       int[][] numbers = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};

       int[][] numbersCopy = Arrays.copyOf(numbers, numbers.length);

       System.out.println("Are these two-dimensional arrays equal to each other?");
       System.out.println(Arrays.deepEquals(numbers, numbersCopy));

       System.out.println(Arrays.deepToString(numbersCopy));
   }
}
Netije:

Равны ли эти двумерные массивы между собой?
true
[[1, 2, 3], [4, 5, 6], [7, 8, 9]]
Görşüňiz ýaly, bu usul Arrays.copyOf()iki ölçegli massiwiň göçürilmegi bilen çözüldi. Bu ýagdaýda iki ölçegli massiw göçürilende “ýalpak göçürme” diýilýän zadyň ýüze çykýandygyny ýadyňyzdan çykarmaň. Iki ölçegli massiwleri deňeşdirmek we konsola çykarmak üçin ýörite usullar berilýär - deepEqualswe deepToString(); Geljekde Java döredijileriň programmistleriň işleýän wagtynda ýüze çykýan köp sanly adaty ýagdaýlaryny öňünden görüp, dilde olar üçin taýyn çözgütleri durmuşa geçirendiklerini birnäçe gezek görersiňiz (we muňa begeniň). Bu çözgütleri ulanmak tigirleri täzeden dikeltmekden has aňsat we amatly, şeýlemi? :) OracleArrays web sahypasyndaky synp resminamalaryny hökman okaň . Okuwyňyz bilen üstünlik arzuw ediň!
Teswirler
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION