CodeGym /Java курс /All lectures for BG purposes /Масиви — помощен клас

Масиви — помощен клас

All lectures for BG purposes
Ниво , Урок
На разположение

„Амиго, надявам се досега да си разбрал колко полезни са масивите в програмирането?“

„Със сигурност, Риши! Вече съм решил повече от една задача.“

„Вашите задачи имаха ли повтарящи се действия? Такива, които сте правor отново и отново.“

"Ако ви разбрах правилно, имате предвид подобни действия в различни задачи? Например, навсякъде да използвате цикъл за показване на съдържанието на масив - толкова съм уморен да правя това!"

„Да, това имам предвид. Създателите на Java забелязаха, че Java програмистите често пишат един и същ code, когато работят с масиви. Например code за копиране на част от масив в друг масив or code за запълване на всяка клетка от масив със същия Или вашият пример: code за показване на съдържанието на масив в четима форма на екрана.

„И истинските програмисти имат едно много важно правило: не се повтаряйте. Съгласете се, че е погрешно да вършите излишна работа – няма да ви бъде платено за това. Ефективната работа е добре платена, повярвайте ми. Между другото, начинаещият codeът веднага се разпознава от голямото количество повтарящ се code.

„Създателите на Java се замислиха над това и създадоха специалния Arraysклас (пълното му име е java.util.Arrays), поставяйки в него най-популярните действия, свързани с масиви.“

„Хм... Много интересно. И така, Howво точно има?

„Има много методи за всеки повод, но първо ще разгледаме само 10 от тях – най-простите и най-често използвани.

Arrays.toString()

„Първият метод, който ще разгледаме, е Arrays.toString(). Но първо, малко предистория.

„Всеки масив в Java има toString()метод, който връща „текстово представяне на масива“. Можете да получите текстово представяне на масив, като използвате следния оператор:

String str = name.toString();

„Къде nameе името на променливата на масива и strимето на променливата, която ще съхранява низовото представяне на масива. Амиго, пробвал ли си да отпечаташ масив на екрана с помощта на метода ?System.out.println(name)

Признавам си, това се случи. Видях няHowви безсмислици. Реших да стоя далеч от опасностите и да продължа да използвам цикли.

„Най-вероятно сте видели нещо като:

I@37afeb11

„Първата буква Iозначава, че това е intмасив, а символите след него @са addressът на единичен обект в паметта. Можете да мислите за това като за address на масива в паметта. От една страна, това е точно информацията, съхранявана в масивна променлива, но от друга страна очаквахте нещо различно, нали?"

"Точно така! Планирах да видя стойностите в масива. Това беше последното нещо, което очаквах."

„И точно затова те измислиха метода Arrays.toString()– да покажат стойностите на масив. Ние го наричаме така:

String str = Arrays.toString(name);

Примери:

int[] array = {1, 2, 3};
String str = Arrays.toString(array);
Променливата strще съдържа низа"[1, 2, 3]"
int[] array = {};
String str = Arrays.toString(array);
Променливата strще съдържа низа"[]"
String[] array = {"Hi", "How's", "life?"};
String str = Arrays.toString(array);
Променливата strще съдържа низа"[Hi, How's, life?]"

Arrays.deepToString()

„Методът обаче toString()не е адекватен, когато става въпрос за двумерни масиви. С други думи, ако се опитате да извикате Arrays.toString(), ще видите нещо познато:

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

„Всичко това е така, защото клетките на двумерен масив съхраняват препратки към едномерни масиви. И How едномерните масиви се преобразуват в низ? Точно Howто виждате по-горе.

"Какво да направим тогава? Как правилно да покажем двуизмерен масив?"

„Създателите на Java също са предвидor това. За тази цел класът Arraysима друг специален метод — deepToString(). Извикването му изглежда така:

String str = Arrays.deepToString(name);

„Този ​​метод може да предава масиви, които са двуизмерни, едноизмерни, триизмерни or като цяло всяко измерение, и той винаги ще показва елементите на масива.

Примери:

int[] 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]], [[]]]"

Arrays.equals()

„Разбрахме How да показваме масиви на екрана. Какво ще кажете за сравняване на масиви? Спомняте ли си Howви методи можем да използваме, за да сравняваме низове?“

„Обикновено използвам equalsметода!

„Да, equalsи също equalsIgnoreCase(което сравнява низове без оглед на главни и малки букви).

„Добра новина: можете също да използвате equalsметода за масиви. Лоша новина: той не сравнява съдържанието на масиви. Методът equalsна масивите прави същото нещо като ==оператора – сравнява препратките.

Примери:

int[] x1 = {1, 2, 3};
int[] x2 = {1, 2, 3};
x1 == x2;
false(препратките не са еднакви)
int[] x1 = {1, 2, 3};
int[] x2 = {1, 2, 3};
x1.equals(x2);
Методът equalsна arraysпросто сравнява препратките на два масива.

false(препратките не са еднакви)

"И така, Howво да правим? Как да сравняваме масиви въз основа на тяхното съдържание?"

„Отново Arraysкласът ни идва на помощ. По-конкретно, неговият Arrays.equals()метод. Ето How го наричаме:

Arrays.equals(name1, name2)

„Методът връща, trueако масивите са с еднаква дължина и техните елементи са еднакви. В противен случай връща false.

Примери:

int[] x1 = {1, 2, 3};
int[] x2 = {1, 2, 3};
x1.equals(x2);
Методът equalsна arraysпросто сравнява препратките на два масива.

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(съдържанието на масивите е различно)

Arrays.deepEquals()

„И, Howто вероятно вече се досещате, Arrays.equalsметодът няма да работи правилно за двумерни масиви: той третира двумерните масиви като едномерен масив, чиито елементи са addressи на едномерни масиви.

„По този начин, за да сравнят правилно многоизмерни масиви ( n = 1, 2, 3,... ), те излязоха с Arrays.deepEquals()метода. Извикването му изглежда така:

Arrays.deepEquals(name1, name2)

„Методът се връща true, ако масивите са с еднаква дължина и техните елементи са еднакви. В противен случай се връщаfalse. Ако елементите вътре в масива също са масиви, тогава Arrays.deepEquals()методът се използва за тяхното сравняване и т.н.

Примери:

int[][] x1 = {{1, 2, 3}, {4, 5, 6}};
int[][] x2 = {{1, 2, 3}, {4, 5, 6}};

x1.equals(x2);
Методът equalsна arrays просто сравнява препратките на два масива.

false(препратките не са еднакви)
int[][] x1 = {{1, 2, 3}, {4, 5, 6}};
int[][] x2 = {{1, 2, 3}, {4, 5, 6}};

Arrays.equals(x1, x2);
Методът Arrays.equalsще сравнява и като едномерни масиви, които съхраняват препратки. Те съдържат различни препратки. (съдържанието на масивите не е равно) x1x2
false
int[][] x1 = {{1, 2, 3}, {4, 5, 6}};
int[][] x2 = {{1, 2, 3}, {4, 5, 6}};

Arrays.deepEquals(x1, x2);



true(съдържанието е равностойно)

„Благодаря ти, Риши! Този урок е точно това, от което имах нужда, за да направя живота си по-лесен и по-щастлив в бъдеще. Сега ще използвам методите на класа Arrays и ще пиша програмите си още по-бързо.

„На това разчитах, ха-ха. Но това не са всички интересни методи в класа Arrays. Ще ви разкажа за други следващия път.“

Коментари
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION