JavaRush /Kurslar /All lectures for UZ purposes /Arrays yordamchi klassi

Arrays yordamchi klassi

All lectures for UZ purposes
Daraja, Dars
Mavjud

1. Arrays sinfi

Biz ilgari gapirgandik, massivlar dasturlashda juda foydali va tez-tez ishlatiladigan narsa.

Java yaratuvchilari tezda tushunishdi, Java dasturchilari massivlar bilan ishlashda bir xil kodni yozishadi. Masalan: "Massivning bir qismini boshqa massivga ko'chirish", "Massivning barcha hujayralarini bir xil qiymatlar bilan to'ldirish", "Massivning mazmunini o'qish uchun qulay ko'rinishda ekranga chiqarish" va hokazo.

Shuning uchun ular maxsus klass yaratishdi - Arrays (to‘liq nomi java.util.Arrays), bu massivlar bilan ishlashning eng mashhur harakatlarini o‘z ichiga olgan.

Unda har xil holatlar uchun ko'p metodlar bor, lekin avval biz faqat 10 ta eng oddiy va keng qo'llaniladiganlarini ko'rib chiqamiz.


2. Arrays.toString() методы

Ва биз кўриб чиқадиган биринчи метод - Arrays.toString() бўлади. Аммо аввалига бироз тарихини кўриб чиқамиз.

Java'да ҳар бир массивда toString() method mavjud бўлиб, у "массивнинг текст кўриниши"ни қайтаради. Массивнинг текст кўринишини қуйидаги структура орқали олиш мумкин:

String str = имя.toString();

Бу ерда имя - массив ўзгарувчисининг номи, ва str - массивнинг строкавий кўринишини сақлаб оладиган ўзгарувчи номи.

Лекин агар сиз массивни экранда метод System.out.println(имя) орқали чиқариб кўрсангиз, эҳтимол сиз қуйидагича кўрасиз:

I@37afeb11

Биринчи ҳарф I бу int туридаги массив эканлигини англатади, символлар кейин @ - массивнинг хотирадаги манзили. Бир тарафдан, массив-ўзгарувчи айнан шу маълумотни сақлайди, лекин бошқа тарафдан, биз бошқа нарсани кутган эдик, тўғрими?

Биз массивнинг қийматларини кўришни истаймиз! Ва айнан массивнинг қийматларини кўриш учун, Arrays.toString() методи ишлаб чиқилган. Унинг чақируви қуйидаги кўринишда бўлади:

String str = Arrays.toString(имя);

Мисоллар:

int[] array = {1, 2, 3};
String str = Arrays.toString(array);
Ўзгарувчи str строка қийматини сақлайди:
"[1, 2, 3]"
int[] array = {};
String str = Arrays.toString(array);
Ўзгарувчи str строка қийматини сақлайди:
"[]"
String[] array = {"Привет", "Как", "Дела"};
String str = Arrays.toString(array);
Ўзгарувчи str строка қийматини сақлайди:
"[Привет, Как, Дела]"


3. Arrays.deepToString() методы

Лекин агар сиз Arrays.toString() method маълумотини икки ўлчамли массивга строкага айлантиришга (экранига чиқаришга) уринсангиз, таниш ниманидир кўрасиз:

[I@37afeb11, I@37afeb21, I@37afeb31]

Бундай бўлиши сабаби, икки ўлчамли массивнинг ячейкаларда бир ўлчамли массивларга ҳаволалар сақланади. Бир ўлчамли массивлар қандай строкага айлантирилади? Айнан шу кўринишда, сиз юқорида кўрганингиздек.

Унда нима қилиш керак? Қандай қилиб икки ўлчамли массивнинг тўғри кўринишини олиш мумкин?

Бунинг учун Arrays синфида яна бир махсус метод мавжуд — deepToString(). Унинг чақирилиши қуйидагича кўринишда бўлади:

String str = Arrays.deepToString(имя);

Бу методга икки ўлчамли, бир ўлчамли, уч ўлчамли ва умуман ҳар қандай ўлчамдаги массивни бериб, у доимо массив элементларини кўрсатади.
Эътибор беринг: Arrays.deepToString() методи примитивлар (масалан, int[])нинг бир ўлчамли массивларида ишламайди.

Мисоллар:

Integer[] array = {1, 2, 3};
String str = Arrays.deepToString(array);
Ўзгарувчи str строка қийматини сақлайди:
"[1, 2, 3]"
int[][] array = { {1, 1}, {2, 2}, {3, 3} };
String str = Arrays.deepToString(array);
Ўзгарувчи str строка қийматини сақлайди:
"[[1, 1], [2, 2], [3, 3]]"
int[][][] array = { {{1, 2, 3}, {1}}, {{}} };
String str = Arrays.deepToString(array);
Ўзгарувчи str строка қийматини сақлайди:
"[[[1, 2, 3], [1]], [[]]]"


4. Arrays.equals() методы

Биз массивларни экранга чиқариш билан ишни битирдик, энди массивларни солиштириш масаласига кўчамиз.

Строкларни солиштириш учун бизда equals ва equalsIgnoreCase методлари бор, массивларда қандай методлар бор?

Яхши хабар: массивларда equals метод мавжуд, ва ёмон хабар — у массивларнинг мазмунини қиёсламайди. equals методи массивларда оператор == каби ишлайди — ҳаволаларни қиёслайди.

Мисоллар:

int[] x1 = {1, 2, 3};
int[] x2 = {1, 2, 3};
boolean b = x1 == x2;


false (ҳаволалар тенг эмас)
int[] x1 = {1, 2, 3};
int[] x2 = {1, 2, 3};
x1.equals(x2);
Массивлардаги equals методи икки массивнинг ҳаволаларини муқоёса қилади.

false (ҳаволалар тенг эмас)

Унда нима қилиш керак? Массивларни мазмунига кўра қандай қилиб муқоёса қилиш мумкин?

Яна бир марта Arrays синфи ва унинг Arrays.equals() методи ёрдамга келади. Унинг чақирилиши қуйидагича кўринишда:

Arrays.equals(имя1, имя2)

Метод массивлар тенг узунликда бўлса ва уларнинг элементлари мувофиқ бўлса true (ҳақиқат)ни қайтаради. Акс ҳолда false (ёлғон)ни қайтаради.

Мисоллар:

int[] x1 = {1, 2, 3};
int[] x2 = {1, 2, 3};
x1.equals(x2);
Массивларда equals методи икки массивнинг ҳаволаларини муқоёса қилади.

false (ҳаволалар тенг эмас)
int[] x1 = {1, 2, 3};
int[] x2 = {1, 2, 3};
Arrays.equals(x1, x2);


true (массивларнинг мазмуни тенг)
int[] x1 = {1, 2, 3};
int[] x2 = {1, 2, 3, 4};
Arrays.equals(x1, x2);


false (массивларнинг мазмуни фарқли)

5. Arrays.deepEquals() методы

Ва сиз эҳтимол билиб турганингиздек, Arrays.equals методи икки ўлчамли массивлар учун нотўғри ишлайди: у иккинчи ўлчамли массивни бир ўлчамли сифатида қараб, унга ҳаволаларни ишлаб чиқадиган элементлар сифатида қарайди.

Шуни учун, кўп ўлчамли массивларни (n=1, 2, 3, ...) тўғри муқоёса қилиш учун Arrays.deepEquals() методи яратилди. Унинг чақирилиши қуйидагича кўринишда:

Arrays.deepEquals(имя1, имя2)

Метод массивлар тенг узунликда бўлса ва уларнинг элементлари мувофиқ бўлса trueни қайтаради. Акс ҳолда falseни қайтаради. Агар массивнинг ичидаги элементлар ҳам массив бўлса, уларни муқоёса қилиш учун Arrays.deepEquals() методи ишлатилади ва ҳ.к.

Мисоллар:

int[][] x1 = {{1, 2, 3}, {4, 5, 6}};
int[][] x2 = {{1, 2, 3}, {4, 5, 6}};
x1.equals(x2);
Массивлардаги equals методи икки массивнинг ҳаволаларини муқоёса қилади.

false (ҳаволалар тенг эмас)
int[][] x1 = {{1, 2, 3}, {4, 5, 6}};
int[][] x2 = {{1, 2, 3}, {4, 5, 6}};
Arrays.equals(x1, x2);
Метод Arrays.equals x1 ва x2ни бир ўлчамли массивлар сифатида солиштиради, уларда ҳаволалар сақланган. Улардаги ҳаволалар турли хилдир.
false (массивларнинг мазмуни тенг эмас)
int[][] x1 = {{1, 2, 3}, {4, 5, 6}};
int[][] x2 = {{1, 2, 3}, {4, 5, 6}};
Arrays.deepEquals(x1, x2);


true (массивларнинг мазмуни тенг)

Izohlar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION