1. Giriş
Java-da massivlər — güclü alətdir, lakin əsas sintaksis tez bir zamanda rutin işə dirənir. Köməyə java.util.Arrays sinfi gəlir — massivlərlə işləmək üçün statik metodlar toplusu: çeşidləmə, kopyalama, müqayisə, formatlaşdırılmış çıxış və daha çoxu. Nümunə yaratmağa ehtiyac yoxdur — bütün metodlar statikdir və sinif adı ilə çağrılır.
Metodlardan istifadə etmək üçün faylın əvvəlində import əlavə edin:
import java.util.Arrays;
Importu unutsaq, kompilyator Arrays tapılmadığını («tapılmadı») bildirəcək — bu xəta deyil, importsuz gözlənilən davranışdır.
2. Massivin çeşidlənməsi: Arrays.sort
Arrays.sort necə işləyir
Sintaksis
Arrays.sort(massiv);
Arrays.sort(massiv, nachal’nyyIndeks, konechnyyIndeks);
Metod «yerində» çeşidləyir — ilkin massivi dəyişir və yeni massiv qaytarmır. Orijinal qaydanı saxlamaq istəyirsiniz? Əvvəlcə massivi kopyalayın.
Nümunə: tam ədədlər massivinin çeşidlənməsi
int[] scores = {5, 2, 9, 1, 7};
Arrays.sort(scores); // Artan qaydada çeşidləyirik
System.out.println("Çeşidlənmiş massiv: " + Arrays.toString(scores));
// Nəticə: [1, 2, 5, 7, 9]
Nümunə: sətir massivinin çeşidlənməsi
String[] names = {"Vasya", "Petya", "Anya", "Igor’"};
Arrays.sort(names);
System.out.println(Arrays.toString(names));
// [Anya, Igor’, Petya, Vasya]
Vacibdir: sətirlər leksikoqrafik (əlifba üzrə), ədədlər isə artan qaydada çeşidlənir.
Massivin bir hissəsinin çeşidlənməsi
int[] arr = {7, 5, 3, 1, 9, 8};
Arrays.sort(arr, 1, 4); // elementləri indeks 1-dən 3-ə qədər (4 daxil edilmir) çeşidləyir
System.out.println(Arrays.toString(arr));
// [7, 1, 3, 5, 9, 8]
Xüsusiyyətlər
- «Yerində» çeşidləmə: orijinal massiv dəyişir.
- Ədədlər — artan qaydada, sətirlər — əlifba üzrə.
- Mürəkkəb obyektlər üçün komparatorlu overloaddan istifadə edin.
3. Massivin doldurulması: Arrays.fill
Sintaksis
Arrays.fill(massiv, znachenie);
Arrays.fill(massiv, nachal’nyyIndeks, konechnyyIndeks, znachenie);
Metod bütün elementləri və ya göstərilən hissəni eyni dəyərlə doldurur.
int[] marks = new int[5];
Arrays.fill(marks, 3); // Bütün elementlər indi 3-ə bərabərdir
System.out.println(Arrays.toString(marks)); // [3, 3, 3, 3, 3]
Massivin bir hissəsini doldurmaq
int[] arr = new int[10];
Arrays.fill(arr, 2, 5, 7); // 2-dən 4-ə qədər indeksləri daxil olmaqla dolduracaq (5 daxil edilmir)
System.out.println(Arrays.toString(arr));
// [0, 0, 7, 7, 7, 0, 0, 0, 0, 0]
Sətir massivinin doldurulması
String[] guests = new String[4];
Arrays.fill(guests, "Boş");
System.out.println(Arrays.toString(guests)); // [Boş, Boş, Boş, Boş]
4. Massivin kopyalanması: Arrays.copyOf və Arrays.copyOfRange
Arrays.copyOf
Sintaksis
Arrays.copyOf(iskhodnyyMassiv, novayaDlina);
Yeni massiv yaradır və elementləri orijinaldan kopyalayır. Yeni uzunluq orijinaldan böyükdürsə, «quyruq» susmaya görə dəyərlərlə doldurulur (0 int üçün, null istinad tipləri üçün).
int[] original = {1, 2, 3};
int[] copy = Arrays.copyOf(original, 5);
System.out.println(Arrays.toString(copy)); // [1, 2, 3, 0, 0]
Massivin kiçildilməsi
int[] shortCopy = Arrays.copyOf(original, 2);
System.out.println(Arrays.toString(shortCopy)); // [1, 2]
Arrays.copyOfRange
Sintaksis
Arrays.copyOfRange(iskhodnyyMassiv, nachal’nyyIndeks, konechnyyIndeks);
int[] arr = {10, 20, 30, 40, 50};
int[] mid = Arrays.copyOfRange(arr, 1, 4); // İndeks 1-dən 3-ə qədər olan elementləri kopyalayacaq
System.out.println(Arrays.toString(mid)); // [20, 30, 40]
5. Massivlərin müqayisəsi: Arrays.equals və Arrays.deepEquals
Java-da massivləri == ilə müqayisə etmək olmaz — bu, məzmunu deyil, istinadları müqayisə edir:
int[] a = {1, 2, 3};
int[] b = {1, 2, 3};
System.out.println(a == b); // false!
Məzmunu necə müqayisə etməli?
Arrays.equals(massiv1, massiv2);
Arrays.deepEquals(matritsa1, matritsa2);
System.out.println(Arrays.equals(a, b)); // true
Birölçülü massivlər üçün Arrays.equals, iki və daha çox ölçülü massivlər üçün isə Arrays.deepEquals istifadə edin.
Nümunə: ikiölçülü massivlərin müqayisəsi
int[][] matrix1 = {{1, 2}, {3, 4}};
int[][] matrix2 = {{1, 2}, {3, 4}};
System.out.println(Arrays.equals(matrix1, matrix2)); // false!
System.out.println(Arrays.deepEquals(matrix1, matrix2)); // true
6. Massivin səliqəli çıxışı: Arrays.toString və Arrays.deepToString
Massivi birbaşa çap etmək oxunmaz sətir verəcək:
int[] arr = {1, 2, 3};
System.out.println(arr); // [I@7a81197d
Sintaksis
Arrays.toString(massiv);
Arrays.deepToString(matritsa);
System.out.println(Arrays.toString(arr)); // [1, 2, 3]
int[][] matrix = {{1, 2}, {3, 4}};
System.out.println(Arrays.deepToString(matrix)); // [[1, 2], [3, 4]]
7. Arrays sinfi ilə işləyərkən tipik səhvlər
Səhv №1: massivləri == ilə müqayisə etmək
Massivlər — obyektlərdir və == yalnız istinadları müqayisə edir. Dəyərlər eyni olsa belə, nəticə false olacaq. Birölçülü massivlər üçün Arrays.equals, çoxölçülü massivlər üçün isə Arrays.deepEquals istifadə edin.
Səhv №2: çeşidləmənin massivi «yerində» dəyişdiyini unutmaq
Əgər orijinal qayda lazımdırsa, əvvəlcə Arrays.copyOf ilə nüsxə yaradın, sonra nüsxəni çeşidləyin. Əks halda, orijinal qayda itiriləcək.
Səhv №3: sərhədləri Arrays.fill və Arrays.copyOfRange metodlarında səhv başa düşmək
Metodlar yarıaçıq diapazon istifadə edir: sağ sərhəd daxil edilmir. Məsələn, Arrays.fill(arr, 2, 5, 9) indeksləri 2, 3, 4 dolduracaq, amma 5 indeksli elementə toxunmayacaq.
Səhv №4: massivi birbaşa çap etməyə cəhd
System.out.println(arr) çağırışı texniki təqdimatı çap edir. Birölçülü massivlər üçün Arrays.toString, çoxölçülü massivlər üçün Arrays.deepToString istifadə edin.
Səhv №5: çoxölçülü massivləri Arrays.equals ilə müqayisə etmək
Metod yalnız yuxarı səviyyəni (daxili massivlərə istinadları) müqayisə edir. Məzmun üçün Arrays.deepEquals istifadə edin.
GO TO FULL VERSION