JavaRush /Java Blog /Random-TK /Java sanawy massiw: elementleriň sanawyny massiwine öwüri...
Анзор Кармов
Dereje
Санкт-Петербург

Java sanawy massiw: elementleriň sanawyny massiwine öwüriň

Toparda çap edildi
Salam! Bu makalada elementleriň sanawyny Java-da elementleriň hataryna nädip öwürmelidigine serederis. Aslynda muny etmegiň köp usuly ýok we hemmesi ýönekeý, şonuň üçin makala çylşyrymly bolmaz. Java sanawy massiw üçin: elementleriň sanawyny massiwine öwüriň - 1Näme bilen işleýändigimizi derrew çözeliň. Sanawlary massiwlere, has takygy, setirleriň sanawyna öwüreris: Men, söýýärin, öwrenýärin, JavaRush şol setirleriň hataryna öwrüler. Emma ilki bilen azajyk bonus. Sanawy nädip çalt ýazmalydygy barada gürleşeliň.

Sanawy nädip çalt ýazmaly

Lifeadyňyzda saklaň: bu durmuşda iki ssenariýa bar. Birinjisi, täze sanaw açanymyzda gaty gynanç we içgysgynçlyk:
List<String> wordsList = new ArrayList();
Soň bolsa oňa gymmatlyklar goşýarys ... Birin-birin ...
wordsList.add("I");
wordsList.add("love");
wordsList.add("learning");
wordsList.add("on");
wordsList.add("JavaRush");
Gowy däl. Sanawy döredýän wagtym näme üçin zerurdygyny ýatdan çykardym! Ikinji ýol, ähli gereksiz zatlary kesip, ... peýdaly sapaklary kabul etmekdir. ArraysMysal üçin, ajaýyp amatly usuly bolan synp asList. Sanaw düzmek isleýän zadyňyzy oňa geçirip bilersiňiz we usul ony sanaw eder. Şuňa meňzeş bir zat:
List<String> wordsList = Arrays.asList("I", "love", "learning", "on", "JavaRush");
varargsBu usul bir manyda bir massiw alýar . Leksiýa sanawyna düzülen leksiýada size ilki sanaw ýazmagy öwredendigim üçin ötünç soraýaryn, ýöne ýagdaýlar talap edýärdi. Indi, sanawlary massiwlere öwürmek usullarymyza.

Usul No. 1 Büst

Bu usul kän pikirlenmän klawiaturada kod ýazmagy halaýanlar üçin ajaýyp. Meditasiýa. Stepdim 1. Sanaw bilen deň uzynlykdaky massiw dörediň:
List<String> wordsList = Arrays.asList("I", "love", "learning", "on", "JavaRush");
String[] wordsArray = new String[wordsList.size()];
Stepdim 2. Sanawyň ähli elementlerini gaýtalamak we massiw öýjüklerine indeks boýunça girip bilmek üçin hasaplaýjy bilen aýlaw dörediň:
for (int i = 0; i < wordsList.size(); i++) {

}
3-nji ädim. Aýlawyň içinde sanawyň her elementiniň bahasyny i indeks bilen massiw öýjügine belläris:
for (int i = 0; i < wordsList.size(); i++) {
    wordsArray[i] = wordsList.get(i);
}
Netije:
public static void main(String[] args) {

        List<String> wordsList = Arrays.asList("I", "love", "learning", "on", "JavaRush");
        String[] wordsArray = new String[wordsList.size()];

        for (int i = 0; i < wordsList.size(); i++) {
            wordsArray[i] = wordsList.get(i);
        }
    }

Usul No.2 toArray usuly

Ulanmak üçin iň amatly zat bolsa gerek. Interfeýsde häzirki sanawdan massiw döredýän Listiki usul bar :toArray
Object[] toArray();
 T[] toArray(T[] a);
Birinji usul, häzirki sanawyň ähli elementlerini öz içine alýan obýektleriň toplumyny yzyna gaýtaryp berýär:
public class Main {
    public static void main(String[] args) {
        List<String> wordsList = Arrays.asList("I", "love", "learning", "on", "JavaRush");
        String[] wordsArray = (String[]) wordsList.toArray();

        for (String word : wordsArray) {
            System.out.println(word);
        }

    }
}
Usuly işledeliň mainwe aşakdakylary göreliň:

I
love
learning
on
JavaRush
Şeýle-de bolsa, bu usulyň aýratynlygy bar: elmydama obýektleriň toplumyny yzyna gaýtaryp berýär (Object[]). Şonuň üçin yzyna gaýtarylan netije islenýän maglumat görnüşine berilmelidir. Aboveokardaky mysalda ony setirler toplumyna atdyk (String[]). Emma bu usul käbir ýagdaýlarda amatly bolup biljek argumentleri kabul etmeýär. Ikinji usul, häzirki sanawyň ähli elementlerini öz içine alýan bir massiwi hem yzyna gaýtaryp berýär. Şeýle-de bolsa, birinjiden tapawutlylykda, ikinji usul argument hökmünde belli bir görnüşi alýar. Secondöne ikinji usulyň netijesi obýektleriň toplumy däl-de, belli bir maglumat görnüşiniň massiwi - argument hökmünde geçen massiw usulyndaky maglumat görnüşi bilen deňdir.
public class Main {
    public static void main(String[] args) {
        List<String> wordsList = Arrays.asList("I", "love", "learning", "on", "JavaRush");
        String[] wordsArray = wordsList.toArray(new String[0]);

        for (String word : wordsArray) {
            System.out.println(word);
        }

    }
}
Usuly işletsek main, çykyşda şol bir sözleri göreris:

I
love
learning
on
JavaRush
Geliň, argument hökmünde geçen massiw barada biraz gürleşeliň toArray. Usulyň logikasy, iberilen massiwiň uzynlygyna baglydyr. Mümkin üç ssenariýa bar:

1. Geçirilen massiwiň uzynlygy sanawyň uzynlygyndan az

Bu ýagdaýda usul täze massiw döredýär we sanaw elementlerini oňa ýerleşdirýär. Muny ýokardaky mysalda görkezdik.

2. Geçirilýän elementiň uzynlygy sanawyň uzynlygyna deňdir

Usul sanaw elementlerini geçen massiwde ýerleşdirer. Muny görkezeliň:
public class Main {
    public static void main(String[] args) {
        List<String> wordsList = Arrays.asList("I", "love", "learning", "on", "JavaRush");

        // Создаем пустой массив нужной длины
        String[] array = new String[wordsList.size()];

        // Отправляем пустой массив в метод toArray
        wordsList.toArray(array);

        // Проверяем, заполнился ли наш массив. Спойлер: да
        for (String word : array) {
            System.out.println(word);
        }

    }
}
Çykarylanda, birmeňzeş setirleri göreris we usulyň döreden massiwimizi doldurandygy belli bolar.

3. Geçirilen massiwiň uzynlygy sanawyň uzynlygyndan has uly

Usul sanawyň ähli elementlerini bir hatara ýazar we bahany soňky goşulan elementiň gapdalyndaky öýjüge ýazar null. Muny görkezeliň:
public class Main {
    public static void main(String[] args) {
        List<String> wordsList = Arrays.asList("I", "love", "learning", "on", "JavaRush");

        // Создаем пустой массив, длина которого в 2 раза больше длины списка
        String[] array = new String[wordsList.size() * 2];

        for (int i = 0; i < array.length; i++) {
            // В каждую ячейку запишем строковое представление текущего индекса
            array[i] = String.valueOf(i);
        }

        // Отправляем массив в метод toArray
        wordsList.toArray(array);

        // Проверяем, что лежит в нашем массиве
        for (String word : array) {
            System.out.println(word);
        }

    }
}
Usuly mainkonsolda işledenimizden soň aşakdakylary göreris:

I
love
learning
on
JavaRush
null
6
7
8
9
Üçüsinden haýsy usuly saýlamaly? Java-yň irki wersiýalarynda sanawyň uzynlygyna deň ýa-da ondan uly bolan bir massiw geçirmek iň amatlydy. Şeýle-de bolsa, häzirki zaman JVM-leriň optimizasiýalary bar we käbir ýagdaýlarda sanawyň uzynlygyndan has gysga uzynlykdaky massiwden geçýän usul üçin has çalt öndürijilik berýär. Şonuň üçin Java-yň häzirki zaman wersiýasyny işledýän bolsaňyz, birinji mysaldaky ýaly usula boş massiw geçiriň:
wordsList.toArray(new String[0]);

3-nji usul. Akym API

Bu usul diňe bir sanawy massiwlere öwürmek bilen çäklenmän, ýolda başga-da birnäçe meseläni çözmek isleýänler üçin amatlydyr. Şeýle hem, Java Stream API bilen tanyş adamlar üçin. JavaRush-yň bu mowzukda gowy makalasy bar . Bu bölümde akymlary ulanyp birnäçe mysallara serederis. Akymlary ulanyp sanawy nädip massiwde öwürmeli:
public class Main {
    public static void main(String[] args) {
        List<String> wordsList = Arrays.asList("I", "love", "learning", "on", "JavaRush");

        String[] strings = wordsList.stream()
                .toArray(String[]::new);

        for (String s : strings) {
            System.out.println(s);
        }

        /*
        Output:
        I
        love
        learning
        on
        JavaRush

         */
    }
}
Justöne diňe bir sanawy sanawda goýmaly bolsaňyz, toArray2-nji usulda görkezilen usul bilen muny etmek has gowudyr. Onlyöne diňe bir sanawy massiwlere öwürmek bilen çäklenmän, her elementde haýsydyr bir hereket etmek isleseňiz, bu siziň üçin amatly ýerdir. Sanawy bir massiwine öwürmäge synanyşalyň, iň soňky massiwde ähli setirler baş harp bilen ýazylar:
public class Main {
    public static void main(String[] args) {
        List<String> wordsList = Arrays.asList("I", "love", "learning", "on", "JavaRush");

        String[] strings = wordsList.stream()
                .map(str -> str.toUpperCase())
                .toArray(String[]::new);

        for (String s : strings) {
            System.out.println(s);
        }

        /*
            Output:
            I
            LOVE
            LEARNING
            ON
            JAVARUSH

         */
    }
}
Bu ýerde .map(str -> str.toUpperCase())sanawdaky her setir bilen näme edilmelidigini kesgitledik. Bu ýagdaýda her setiri baş harplara öwrüp, soňam bir massiwde ýygnamagy makul bildik. “Stream API” -i ulanmak diňe bir bahany üýtgetmäge däl-de, süzmäge hem mümkinçilik berýär. Setirleriň sanawyndan bir massiw ýygnamak isleýäris, ýöne massiwde diňe iki simwoldan has uzyn setirler bar:
public class Main {
    public static void main(String[] args) {
        List<String> wordsList = Arrays.asList("I", "love", "learning", "on", "JavaRush");

        String[] strings = wordsList.stream()
                .filter(str -> str.length() > 2)
                .map(str -> str.toUpperCase())
                .toArray(String[]::new);

        for (String s : strings) {
            System.out.println(s);
        }

        /*
            Output:
            LOVE
            LEARNING
            JAVARUSH
         */
    }
}
Ine, setirde .filter(str -> str.length() > 2)sanawyň her elementine massiw girmezden ozal ulanyljak süzgüç diýilýän zady döretdik. Bu ýagdaýda usul her hatar üçin çagyrylýar length()we aňlatmanyň netijesi str.length() > 2dogry bolsa, şeýle hatar saýlanan saýlawda we ahyrynda massiwde gutarar. Otherwiseogsam, urmaz. Bu ýerde, belki-de, elementleriň üstünden gaýtalamak we dürli çäklendirmeler girizmek arkaly şoňa ýetip boljakdygyny aýtmak gerek. Muny hem şeýle edip bilersiňiz. “Stream API” şeýle meseleleri çözmek üçin has amatly çemeleşmäni üpjün edýär.

Netijeler

Bu makalada sanawlary massiwlere öwürmegiň dürli usullaryna seredip geçdik:
  • ýönekeý gözleg;
  • usulytoArray;
  • Akym API.
toArrayIň oňat wariant, interfeýsde kesgitlenen usuly ulanmakdyr List. Şeýle usullaryň ikisi bar:
  • Object[] toArray();
  • T[] toArray(T[] a);
Birinjisi argumentleri kabul etmeýär, ýöne köp sanly obýekti yzyna gaýtaryp berýär, şonuň üçin köplenç aç-açan görnüşli kastinglere ýüz tutmaly bolarsyňyz. Ikinjisi, islenýän görnüşiň massiwini gaýtaryp berýär, ýöne argument hökmünde bir massiw alýar. Boş massiwiň usulyna geçmek iň gowusy, şonda begenersiňiz. “Stream API” -ni ulanmak size diňe bir sanawy massiwde öwürmäge däl-de, eýsem elementlere goşmazdan ozal süzgüç ýa-da elementleri öwürmek ýaly käbir hereketleri ýerine ýetirmäge mümkinçilik berýär.

Öý işi

Bu makaladaky ähli mysallary özüňiz gaýtalamaga synanyşyň, ýöne setirleriň asyl sanawynyň ýerine 0-dan 10-a çenli bitewi sanlaryň sanawyny ulanyň. Elbetde, diňe setirlere degişli mysallardan käbir şertleri täze görnüşe uýgunlaşdyrmaly bolarsyňyz. şertleri.
Teswirler
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION