1. Arrays.fill()
Metodu
Java proqramçılar çox vaxt massivlərlə işləyərkən onları eyni dəyərlə doldurmaq ehtiyacı ilə qarşılaşır. Əlbəttə, dövr yazıb, sadəcə dövrdə massiv hüceyrələrinə müəyyən dəyəri təyin edə bilərsiniz:
int[] x = new int[100];
for (int i = 0; i < x.length; i++)
x[i] = 999;
Ya da sadəcə olaraq Arrays.fill()
metodunu çağıraraq eyni işi görə bilərsiniz: göstərilən massivə göstərilən dəyəri təyin edir. Baxın, bu necə görünür:
Arrays.fill(ad, dəyər)
Beləliklə, yuxarıdakı nümunədəki kodu daha kompakt və başa düşülən edə bilərsiniz:
int[] x = new int[100];
Arrays.fill(x, 999);
Həmçinin Arrays.fill()
metodu ilə yalnız bütün massiv deyil, onun bir hissəsini müəyyən dəyərlə doldura bilərsiniz:
Arrays.fill(ad, birinci, sonuncu, dəyər)
Burada birinci və sonuncu — doldurulması tələb olunan birinci və sonuncu hüceyrələrin nömrələridir.
Nümunə:
|
Hüceyrələri doldururuq: x[3] , x[4] , x[5] , x[6] dəyərlə 999 . Hüceyrə nömrələmə sıfırdan başlayır!str dəyişəninin dəyəri belə görsənir: |
Arrays.fill()
metodu yalnız birölçülü massivlərlə işləyir. Əgər ona ikiölçülü massiv ötürülsə, o, birölçülü kimi işlənəcək və nəticələr uyğun olaraq dəyişəcək.
2. Arrays.copyOf()
metodu
Artıq bildiyiniz kimi, massiv konteynerinin ölçüsünü yaradıldıqdan sonra dəyişmək mümkün deyil.
Bəs dəyişmək istəyirsinizsə?
Bəli, çox istəyirsinizsə, bu mümkündür:
- İstənilən uzunluqda yeni massiv yaradın
- Bütün elementləri ilk massivdən yeni massivə kopyalayın.
Məhz bunu Arrays.copyOf()
metodu edir. Baxın, bu metod necə çağırılır:
tip[] ad2 = Arrays.copyOf(ad, uzunluq);
Bu metod mövcud massivi dəyişdirmir, əvəzində yeni bir massiv yaradır və ora köhnə massivin elementlərini kopyalayır.
Əgər elementlər yerləşməsə (uzunluq mövcud massivin uzunluğundan kiçikdirsə), artıq dəyərlər nəzərə alınmır.
Əgər yeni massivin uzunluğu köhnə massivdən böyükdürsə, hüceyrələr sıfırlarla doldurulur.
Nümunə:
|
Dəyişən str2 bu dəyəri saxlayır: Dəyişən str3 bu dəyəri saxlayır: |
3. Arrays.copyOfRange()
metodu
Bəs siz 10 uzunluqlu massivdən 5 uzunluqlu massiv almaq istəyirsinizsə, amma ilk 5 elementi yox, son 5 elementi daxil etmək istəyirsinizsə, nə etməli?
Məhz bu vəziyyət üçün sizə Arrays
sinifinin başqa bir metodu lazım olacaq - Arrays.copyOfRange()
metodu. Onun çağırışı belə görünür:
tip[] ad2 = Arrays.copyOfRange(ad, birinci, sonuncu);
Bu metod da yeni massiv yaradır, amma onu ilkin massivdən istədiyiniz yerdən məlumatlarla doldurur. Burada birinci və sonuncu - yeni massivdə olması lazım olan ilk və son hüceyrələrin nömrələridir.
Nümunə:
|
Dəyişən str2 aşağıdakı dəyəri saxlayır: Dəyişən str3 aşağıdakı dəyəri saxlayır: |
4. Arrays.sort()
metodu
Bu dəfə ən maraqlısı — sıralama. Proqramlaşdırmada massivləri sıralamaq lazımdır və bu çox tez-tez baş verir. Massivlərlə işləyərkən ən çox görülən üç əməliyyat:
- Massivin sıralanması
- Massivin minimal (və ya maksimal) elementinin tapılması
- Elementin indeksinin tapılması (massivdə elementin axtarışı)
Və məhz buna görə Java tərtibatçıları Arrays
sinfinə sort()
metodunu daxil etmişlər. Onun çağırışı belə görünür:
Arrays.sort(ad);
Bu metod verilmiş massivi artan sırada sıralayır.
Nümunə:
|
Dəyişən str bu qiyməti saxlayır: |
Möhtəşəm, düzdür? Tək bir metodu çağırırsan və voylə, artıq sıralanmış massiv əldə etdin. Gözəldir.
Bu arada, siz bütün massivi deyil, onun bir hissəsini də sıralaya bilərsiniz. Çağırışı belə görünür:
Arrays.sort(ad, birinci, sonuncu);
Burada birinci və sonuncu — sıralamaya daxil olan ilk və son hüceyrələrin nömrələridir.
Nümunə:
|
Dəyişən str bu qiyməti saxlayır: |
Java-da massivlərin sıralanması üçün ən sürətli sıralama alqoritmi istifadə olunur — QuickSort. Onun sürəti massiv ölçüsündən asılıdır və N*Log(N) düsturu ilə təyin olunur.
1000 elementdən ibarət massiv üçün sıralamada təxminən 3_000 müqayisə yerinə yetirilir. Bir milyon elementdən ibarət massiv sıralanarkən təxminən 6 milyon müqayisə yerinə yetirilir.
5. Arrays.binarySearch()
metodu
Və nəhayət, Arrays
sinfinin ən maraqlı metodlarından biri olan bu metod massivin daxilində verilmiş qiyməti axtara bilir. Bu, adi bir axtarış deyil, buna binar axtarış deyilir. Əsas ideya budur:
- Əvvəlcə massiv çeşidlənir
- Sonra massivdəki orta element axtarılan elementlə müqayisə olunur.
- Əgər axtarılan orta elementdən böyükdürsə, axtarış massivin sağ tərəfində davam edir.
- Əgər axtarılan orta elementdən kiçikdirsə, axtarış massivin sol tərəfində davam edir
Massiv çeşidləndiyi üçün bir müqayisə ilə massivin yarısını ata bilirik. Sonrakı addımda daha bir yarısını atırıq və s.
Bu yanaşma binar axtarışı çox sürətli edir. Milyon (!) elementdən ibarət massivdə istənilən elementin indeksini cəmi 20 müqayisə ilə tapa bilər. Bu yanaşmanın mənfi tərəfi odur ki, əvvəlcə massiv çeşidlənməlidir və bu da vaxt tələb edir.
Onun istifadəsi belə görünür:
int index = Arrays.binarySearch(ad, qiymət);
Burada ad
— artıq çeşidlənmiş şəkildə ötürülmüş massiv adıdır (məsələn, Arrays.sort()
funksiyası ilə). qiymət
— massivdə axtarılan elementdir. Metod nəticə qaytarır — massivdə axtarılan elementin indeksi (massiv hüceyrəsinin nömrəsi).
Nümunələr:
|
x aşağıdakıları ehtiva edir: 4 1 (həmçinin 0 və 2 indeksləri də uyğun gəlir)8 -7 |
Əgər massivdə axtarılan elementlər bir neçə dəfə təkrarlanırsa, nəticə kimi onlardan birinin nömrəsi qaytarılacaq (məsələn, ən birinci və ya ən sonuncu olması zəmanət edilmir).
Əgər element massivdə tapılmazsa, indeks mənfi olacaq.
6. Arrays
sinfi haqqında Oracle sənədlərinə keçid
Əgər çox maraqlanırsansa, Arrays
sinfi haqqında tam məlumatı və onun bütün metodlarını Oracle veb-saytında rəsmi sənədləşmədə oxuya bilərsən:
https://docs.oracle.com/en/java/javase/14/docs/api/java.base/java/util/Arrays.html
Məsələn, Arrays.mismatch()
və Arrays.compare()
metodları haqqında oxuya bilərsən. Ola bilər ki, onlar sənin üçün nə isə faydalı olacaq.
Həmçinin metodların sayı səni qorxutmasın – hər metodun 5-10 nüsxəsi var ki, bunlar yalnız parametr tipləri ilə fərqlənir.
GO TO FULL VERSION