1. Arrays
клас
Както отбелязахме по-рано, масивите са много полезни и често използвани в програмирането.
Създателите на Java много бързо забелязаха, че Java програмистите често пишат един и същ code, когато работят с масиви. Например, копиране на част от масив в друг масив, codeиране за запълване на всяка клетка от масив със същата стойност, показване на съдържанието на масив в удобен формат и т.н.
Ето защо те създадоха специалния Arrays
клас (пълното му име е java.util.Arrays
), поставяйки в него най-популярните действия, свързани с масиви.
Има много методи за всеки повод, но първо ще разгледаме само 10 от тях - най-простите и най-често използвани.
2.Arrays.toString()
Първият метод, който ще разгледаме, се нарича Arrays.toString()
. Но първо, малко предистория.
Всеки масив в Java има toString()
метод, който връща „текстово представяне на масива“. Можете да получите текстово представяне на масив, като използвате следния оператор:
String str = name.toString();
Къде name
е името на променливата на масива и str
е името на променливата, която ще съхранява низовото представяне на масива.
Но ако се опитате да отпечатате масива на екрана с помощта на метода, най-вероятно ще видите нещо подобно:System.out.println(name)
I@37afeb11
Първата буква I
означава, че това е int
масив, а символите след него @
са address на масива в паметта. От една страна, точно това е информацията, съхранявана в променливата на масива, но от друга, очаквахме нещо различно, нали?
Искахме да видим стойностите в масива! И точно затова те измислиха метода Arrays.toString()
- да покажат стойностите на масив. Ние го наричаме така:
String str = Arrays.toString(name);
Примери:
|
Променливата str ще съдържа низа:
|
|
Променливата str ще съдържа низа:
|
|
Променливата str ще съдържа низа:
|
3.Arrays.deepToString()
Но ако се опитате да конвертирате двуизмерен масив в using the Arrays.toString()
метод на низ (за да го покажете), ще видите нещо познато:
[I@37afeb11, I@37afeb21, I@37afeb31]
Това е всичко, защото клетките на двумерен масив съхраняват препратки към едномерни масиви. И How се преобразуват едномерните масиви в низ? Точно Howто виждате по-горе.
Какво може да се направи? Как да покажем правилно двуизмерен масив?
За тази цел Arrays
класът има друг специален метод — deepToString()
. Извикването изглежда така:
String str = Arrays.deepToString(name);
Този метод може да предава масиви, които са двумерни, едномерни, триизмерни or, като цяло, всяко измерение, и той винаги ще показва елементите на масива.
Забележка: методът Arrays.deepToString()
не работи с едномерни масиви от примитиви (например int[]
).
Примери:
|
Променливата str ще съдържа низа:
|
|
Променливата str ще съдържа низа:
|
|
Променливата str ще съдържа низа:
|
4.Arrays.equals()
Разбрахме How да показваме масиви на екрана, но Howво да кажем за сравняването на масиви?
За да сравним низове, имаме equals
и equalsIgnoreCase
методи, но Howви методи имат масивите?
Добрата новина е, че масивите имат equals
метод. Лошата новина е, че не сравнява съдържанието на масивите. Методът equals
на масивите прави същото като ==
оператора - сравнява препратките. Примери:
Примери:
|
false (препратките не са еднакви) |
|
Методът equals на arrays просто сравнява препратките на два масива. false (препратките не са еднакви) |
Какво може да се направи? Как да сравняваме масиви въз основа на тяхното съдържание?
И отново Arrays
ни идва на помощ or по-точно неговият Arrays.equals()
метод. Ето How го наричаме:
Arrays.equals(name1, name2)
Методът връща true
, ако масивите са с еднаква дължина и елементите им са еднакви. В противен случай се връща false
.
Примери:
|
Методът equals на arrays просто сравнява препратките на два масива. false (препратките не са еднакви) |
|
true (съдържанието е равностойно) |
|
false (съдържанието на масивите е различно) |
5.Arrays.deepEquals()
И, Howто вероятно вече се досещате, Arrays.equals
методът няма да работи правилно за двумерни масиви: той третира двумерните масиви като едномерен масив, чиито елементи са addressи на едномерни масиви.
По този начин, за правилното сравняване на многоизмерни масиви ( n = 1, 2, 3,...
), те излязоха с Arrays.deepEquals()
метода. Извикването изглежда така:
Arrays.deepEquals(name1, name2)
Методът се връщаtrue
ако масивите са с еднаква дължина и елементите им са равни. В противен случай се връщаfalse
. Ако елементите вътре в масива също са масиви, тогава Arrays.deepEquals()
методът се използва за тяхното сравняване и т.н.
Примери:
|
Методът equals на arrays просто сравнява препратките на два масива. false (препратките не са еднакви) |
|
Методът Arrays.equals ще сравнява и като едномерни масиви, които съхраняват препратки. Те съдържат различни препратки. (съдържанието на масивите не е равно) x1 x2 false |
|
true (съдържанието е равностойно) |
GO TO FULL VERSION