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. Nä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. Arrays
Mysal üç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");
varargs
Bu 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ýänList
iki 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ň main
we 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 ýazarnull
. 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 main
konsolda 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, toArray
2-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() > 2
dogry 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;
- usuly
toArray;
- Akym API.
toArray
Iň oňat wariant, interfeýsde kesgitlenen usuly ulanmakdyr List
. Şeýle usullaryň ikisi bar:
Object[] toArray();
T[] toArray(T[] a);
GO TO FULL VERSION