- оголошення масиву
- визначення масиву
- Доступ до елементів масиву
- ініціалізація масиву
- Практика
- Перебір значень масиву
- багатовимірні масиви
- Двомірний масив
- Розмір має значення
- Взяти частина масиву
- Перемішати елементи масиву
- підводимо підсумки
- Пошук елементів строкового масиву за початковими символам
- клас Arrays
- Сортування масиву
- простий приклад
- Сортуваннях масиву для ArrayAdapter
- Метод Arrays.toString ()
- Метод Arrays.fill () - наповнення масиву однаковими даними
- Метод equals () - порівняння масивів
- завдання
- Знайти максимальне значення з масиву
- Знайти три найбільших числа з масиву
- Перестановка елементів масиву в зворотному порядку
- Помістити нулі в кінець масиву
- Помістити нулі в початок масиву
- Знайти індекс числа з масиву
- Додаткове читання
- Реклама
Стаття проплачена кішками - всесвітньо відомими виробниками кошенят.
Якщо стаття вам сподобалася, то можете підтримати проект .
оголошення масиву
багатовимірні масиви
Перебір значень масиву
Скласти два масиви
Взяти частина масиву
Перемішати елементи масиву
Метод arraycopy () - Копіювання масиву
Пошук елементів строкового масиву за початковими символам
клас Arrays
Сортування масиву
копіювання масивів
Наповнення масиву однаковими даними
порівняння масивів
завдання
У будь-якій мові програмування використовуються масиви, зручні для роботи з великою кількістю однотипних даних. Якщо вам потрібно обробити сотні змінних, то викликати кожну окремо стає клопітно заняттям. У таких випадках простіше застосувати масив. Для наочності уявіть собі зібрані в один ряд порожні коробки. У кожну коробочку можна покласти щось одного типу, наприклад, котів. Тепер, навіть не знаючи їх по іменах, ви можете виконати команду Нагодувати кота з 3 коробки. Порівняйте з командою Нагодувати Рижика. Відчуваєте різницю? Вам не обов'язково знати котів по іменах, але ви все одно зможете впоратися із завданням. Завтра в цих коробках можуть виявитися інші коти, але це не складе для вас проблеми, головне знати номер коробки, який називається індексом.
Ще раз повторимо теорію. Масивом називається іменоване безліч змінних одного типу. Кожна змінна в даному масиві називається елементом масиву. Щоб послатися на певний елемент в масиві потрібно знати ім'я масиву в з'єднанні з цілим значенням, званим індексом. Індекс вказує на позицію конкретного елемента щодо початку масиву. Зверніть увагу, що перший елемент буде мати індекс 0, другий має індекс 1, третій - індекс 2 і так далі. Дане рішення було нав'язано математиками, яким було зручно починати відлік масивів з нуля.
оголошення масиву
Змінну масиву можна оголосити за допомогою квадратних дужок:
int [] cats; // ми оголосили змінну масиву
Можлива і альтернативна запис:
int cats []; // інший варіант
Тут квадратні дужки з'являються після імені змінної. У різних мовах програмування використовуються різні способи, і Java дозволяє вам використовувати той варіант, до якого ви звикли. Але більшість вважає за краще перший варіант. Самі квадратні дужки своїм виглядом нагадують коробки, тому вам буде просто запам'ятати.
Ми поки тільки оголосили масив, але насправді його ще не існує, так як не заповнений даними. Фактично значення масиву одно null.
визначення масиву
Після оголошення змінної масиву, можна визначити сам масив за допомогою ключового слова new із зазначенням типу і розміру. Наприклад, масив повинен складатися з 10 цілих чисел:
cats = new int [10];
Можна одночасно оголосити змінну і визначити масив (в основному так і роблять):
int [] cats = new int [10];
Якщо масив створюється таким чином, то всім елементам масиву автоматично присвоюються значення за замовчуванням. Наприклад, для числових значень початкове значення буде 0. Для масиву типу boolean початкове значення дорівнюватиме false, для масиву типу char - '\ u0000', для масиву типу класу (об'єкти) - null.
Останнє правило може заплутати початківця програміста, який забуде, що рядок типу String є об'єктом. Якщо ви оголосите масив з десяти символьних рядків наступним чином:
String [] catNames = new String [10];
То у вас з'являться рядки зі значенням null, а не порожні рядки, як ви могли б подумати. Якщо ж вам дійсно потрібно створити десять порожніх рядків, то використовуйте, наприклад, такий код:
for (int i = 0; i <10; i ++) catNames [i] = "";
Доступ до елементів масиву
Звернення до елементу масиву відбувається по імені масиву, за яким слідує значення індексу елемента, укладеного в квадратні дужки. Наприклад, на перший елемент нашого масиву cats можна посилатися як на cats [0], на п'ятий елемент як cats [4].
В якості індексу можна використовувати числа або вирази, які створюють позитивне значення типу int. Тому при обчисленні виразу з типом long, слід перетворити результат в int, інакше отримаєте помилку. З типами short і byte проблем не буде, так як вони повністю вкладаються в діапазон int.
ініціалізація масиву
Не завжди потрібно мати значення за замовчуванням. ви можете форматувати масив власними значеннями, коли він оголошується, і визначити кількість елементів. Слідом за оголошенням змінної масиву додайте знак рівності, за яким слідує список значень елементів, поміщений у фігурні дужки. У цьому випадку ключове слово new не використовується:
int [] cats = {2, 5, 7, 8, 3, 0}; // масив з 6 елементів
Можна змішати два способи. Наприклад, якщо потрібно задати явно значення тільки для деяких елементів масиву, а решта належні мати значення за замовчуванням.
int [] cats = new int [6]; // масив з шести елементів з початковим значенням 0 для кожного елемента cats [3] = 5; // четвертому елементу присвоєно значення 5 cats [5] = 7; // шостого елементу присвоєно значення 7
Масиви часто використовують в циклах. Припустимо, 5 котів відзвітували перед вами про кількість спійманих мишок. Як дізнатися середнє арифметичне значення:
int [] mice = {4, 8, 10, 12, 16}; int result = 0; for (int i = 0; i <5; i ++) {result = result + mice [i]; } Result = result / 5; mInfoTextView.append ( "Середнє арифметичне:" + result);
Масив містить спеціальне поле length, яке можна прочитати (але не змінити). Воно дозволяє отримати кількість елементів в масиві. Дана властивість зручно тим, що ви не помилитеся з розміром масиву. Останній елемент масиву завжди mice [mice.length - 1]. Попередній приклад можна переписати так:
int [] mice = {4, 8, 10, 12, 16}; int result = 0; for (int i = 0; i <mice.length; i ++) {result = result + mice [i]; } Result = result / mice.length; // загальний результат ділимо на число елементів в масиві mInfoTextView.append ( "Середнє арифметичне:" + result);
Тепер довжина масиву обчислюється автоматично, і якщо ви створите новий масив з шести котів, то в циклі нічого змінювати не треба.
Якщо вам потрібно змінювати довжину, то замість масиву слід використовувати обліковий масив ArrayList. Самі масиви незмінні.
Будьте обережні з копіюванням масивів. Масив - це не числа, а спеціальний об'єкт, який за особливим зберігається в пам'яті. Щоб не захаращувати вас розумними словами, краще покажу на прикладі.
Припустимо, у нас є одна змінна, потім ми створили другу змінну і привласнили їй значення першої змінної. А потім перевіримо їх.
int a = 5; int b = a; mInfoTextView.setText ( "a =" + a + "\ nb =" + b);
Отримаємо очікуваний результат.
a = 5 b = 5
Спробуємо зробити подібне з масивом.
int [] anyNumbers = {2, 8, 11}; int [] luckyNumbers = anyNumbers; luckyNumbers [2] = 25; mInfoTextView.setText ( "anyNumbers:" + Arrays.toString (anyNumbers) + "\ nluckyNumbers:" + Arrays.toString (luckyNumbers));
Отримаємо результат.
anyNumbers: [2, 8, 25]; luckyNumbers: [2, 8, 25];
Ми скопіювали перший масив в іншу змінну і в ній поміняли третій елемент. А коли стали перевіряти значення в обох масивів, то виявилося, що у першого масиву теж змінилося значення. Але ми ж його не чіпали! Магія. Насправді немає, просто масив залишився колишнім і друга змінна звертається до нього ж, а не створює другу копію. Пам'ятайте про це.
Якщо ж вам реально потрібна копія масиву, то використовуйте метод Arrays.copyOf ()
Якщо ваша програма вийде за межі індексу масиву, то програма зупиниться з помилкою часу виконання ArrayOutOfBoundsException. Це дуже часта помилка у програмістів, перевіряйте свій код.
Практика
Досить балачок. Давайте будемо перевіряти всі вищесказане.
Напишемо такий код:
public void onClick (View view) {int [] cats = new int [6]; String result = String.valueOf (cats [3]); mInfoTextView.setText (result); }
Відкрийте програму і переконайтеся, що четвертого елементу масиву cats [3] присвоєно значення 0. Перевірте таким чином всі елементи масиву. Далі надайте шостого елементу значення 7 і перевірте знову результат.
int [] cats = new int [6]; cats [5] = 7; String result = String.valueOf (cats [5]); mInfoTextView.setText (result);
Однак повернемося до нашої картинці. У всіх котів є імена. Створимо масив з восьми строкових елементів і звернемося до одного з них:
public void onClick (View v) {String [] catsNames = { "Васька", "Кузя", "Барсик", "Мурзик", "Леопольд", "Бегемот", "Рижик", "Матроскін"}; mInfoTextView.setText (catsNames [6]); }
Знову запускайте додатки та міняйте в останньому рядку число, щоб переконатися, що все працює.
Перебір значень масиву
Масиви часто використовуються для перебору всіх значень. Стандартний спосіб через цикл for
int aNums [] = {2, 4, 6}; for (int i = 0; i <aNums.length; i ++) {String strToPrint = "aNums [" + i + "] =" + aNums [i]; }
Також є укорочений варіант запису
for (int num: aNums) {String strToPrint = num; }
Потрібно тільки пам'ятати, що в цьому випадку ми не маємо доступу до індексу масиву, що не завжди підходить для задач. Тому використовується тільки для звичайного перебору елементів.
багатовимірні масиви
Для створення багатовимірних масивів використовуються додаткові дужки:
int [] [] a = {{1, 2, 3}, {4, 5, 6}}
Також масив може створюватися ключовим словом new:
// тривимірний масив фіксованої довжини int [] [] [] b = new int [2] [4] [4];
Двомірний масив
Двовимірний масив - це масив одновимірних масивів. Якщо вам потрібен двовимірний масив, то використовуйте пару квадратних дужок:
String [] [] arr = new String [4] [3]; arr [0] [0] = "1"; arr [0] [1] = "Васька"; arr [0] [2] = "121 987 102"; arr [1] [0] = "2"; arr [1] [1] = "Рижик"; arr [1] [2] = "2819876107"; arr [2] [0] = "3"; arr [2] [1] = "Барсик"; arr [2] [2] = "412 345 678"; arr [3] [0] = "4"; arr [3] [1] = "Мурзик"; arr [3] [2] = "587 654 321";
Уявляйте двовимірний масив як таблицю, де перші дужки відповідають за ряди, а другі - за колонки таблиці. Тоді приклад вище являє собою таблицю з чотирьох рядів і трьох колонок.
1 Васька 121987102 2 Рижик 2819876107 3 Барсик 412345678 4 Мурзик 587654321
Для двовимірних масивів часто використовуються два цикли for, щоб заповнити елементи даними зліва направо і зверху вниз. Напишемо такий код:
int [] [] twoD = new int [3] [4]; // оголосили двомірний масив int i, j, k = 0; for (i = 0; i <3; i ++) for (j = 0; j <4; j ++) {twoD [i] [j] = k; k ++; } For (i = 0; i <3; i ++) {for (j = 0; j <4; j ++) mInfoTextView.append (twoD [i] [j] + ""); mInfoTextView.append ( "\ n"); }
В даному прикладі ми спочатку заповнили двомірний масив даними, а потім знову пройшлися по цього масиву для зчитування даних.
Логічне уявлення даного двовимірного масиву буде виглядати наступним чином:
[0, 0] [0, 1] [0, 2] [0, 3] [1, 0] [1, 1] [1, 2] [1, 3] [2, 0] [2, 1] [2, 2] [2, 3]
Перше число в дужках позначають ряд (рядок), а друге число - стовпець. Прийнято вважати, що в масиві new int [M] [N] перший розмір означає кількість рядків, а другий - кількість стовпців.
На екрані після запуску прикладу ми побачимо наступне:
0 1 2 3 4 5 6 7 8 9 10 11
При резервуванні пам'яті під багатовимірний масив необхідно вказати пам'ять тільки для першого виміру. Для інших вимірів пам'ять можна виділити окремо.
int [] [] twoD = new int [3] []; // пам'ять під перший вимір // далі резервуємо пам'ять під другий вимір twoD [0] = new int [4]; twoD [1] = new int [4]; twoD [2] = new int [4];
В даному прикладі особливого сенсу в цьому немає.
Ще одна цікава особливість при створенні масиву пов'язана з коми. Подивіться на приклад.
int [] [] a = {{1, 2, 3}, {4, 0, 0,},}; System.out.println (Arrays.deepToString (a));
Начебто в кінці використовується зайва кома, але її наявність не призведе до помилки (тільки одна кома). Це буває зручно, коли треба скопіювати або вставити шматок масиву в коді. До речі, метод deepToString () класу Arrays дуже зручний для виведення двовимірних масивів.
Щоб зовсім збити вас з пантелику, наведу ще один правильний приклад.
Integer [] Integer [] = {{1, 2, 3}, {4, 0, 0,},}; System.out.println (Arrays.deepToString (Integer));
Я вже згадував, що квадратні дужки можна використовувати двома способами. Спочатку ми поставили дужки у типу змінної, а потім у імені змінної. При цьому ми використовували в якості імені ім'я класу Integer. Однак, Java здогадується, що на цей раз використовується не клас, а ім'я та дозволяє такий синтаксис. Але краще так не випендрюватися.
Розмір має значення
Розмір двовимірного масиву вимірюється цікавим способом. Довжина масиву визначається за його першої розмірності, тобто обчислюється кількість рядів.
int [] [] matrix = new int [4] [5]; System.out.println (matrix.length);
А якщо ми хочемо дізнатися кількість стовпців в ряду? Тоді вказуєте ряд, а потім обчислюєте у нього кількість стовпців.
// число колонок у третього ряду System.out.println (matrix [2] .length);
Не забувайте, що в масивах ряди можуть містити різну кількість стовпців.
Припустимо, у вас є два масиви, і вам потрібно їх поєднати і отримати загальний масив.
private double [] concatArray (double [] a, double [] b) {if (a == null) return b; if (b == null) return a; double [] r = new double [a.length + b.length]; System.arraycopy (a, 0, r, 0, a.length); System.arraycopy (b, 0, r, a.length, b.length); return r; }
Замість типу double ви можете використовувати інші типи. Ось наприклад, приклад складання двох строкових масивів:
// метод для склеювання двох строкових масивів private String [] concatArray (String [] a, String [] b) {if (a == null) return b; if (b == null) return a; String [] r = new String [a.length + b.length]; System.arraycopy (a, 0, r, 0, a.length); System.arraycopy (b, 0, r, a.length, b.length); return r; } String [] week1 = new String [] { "Понедельник", "Вiвторок", "Середовище"}; String [] week2 = new String [] { "Четвер", "Котопятніца", "Субкота", "Воскресенье"}; String [] week = concatArray (week1, week2); // буде повернуто масив всіх семи днів тижня
Взяти частина масиву
Аналогічно, якщо вам потрібно взяти тільки частина з великого масиву, то скористайтеся методом:
// start - з якої позиції потрібно отримати новий масив, відлік з 0 private double [] copyPartArray (double [] a, int start) {if (a == null) return null; if (start> a.length) return null; double [] r = new double [a.length - start]; System.arraycopy (a, start, r, 0, a.length - start); return r; } Public void onClick (View v) {double [] digits = new double [] {6.5, 3.1, 5.72}; double [] part = copyPartArray (digits, 1); Toast.makeText (v.getContext (), part [1] + "", Toast.LENGTH_LONG) .show (); }
Тут ви також можете використовувати інші типи замість double. Ось приклад використання:
private String [] copyPartArray (String [] a, int start) {if (a == null) return null; if (start> a.length) return null; String [] r = new String [a.length - start]; System.arraycopy (a, start, r, 0, a.length - start); return r; } Public void onClick (View v) {String [] weekday = new String [] { "Понедельник", "Вiвторок", "Середовище"}; // нам потрібен масив з другого елементу String [] week = copyPartArray (weekday, 1); // поверне вівторка та середи // виводимо другий елемент з отриманого масиву, тобто Середа Toast.makeText (v.getContext (), week [1], Toast.LENGTH_LONG) .show (); }
Перемішати елементи масиву
Буває необхідність перемішати елементи масиву в випадковому порядку. В інтернеті знайшов готовий метод за алгоритмом Fisher-Yates (прим .: Fisher - це рибалка, який ловить рибу, наприклад, кіт)
// Implementing Fisher-Yates shuffle static void shuffleArray (int [] ar) {Random rnd = new Random (); for (int i = ar.length - 1; i> 0; i--) {int index = rnd.nextInt (i + 1); // Simple swap int a = ar [index]; ar [index] = ar [i]; ar [i] = a; }} // створимо масив і перемішаємо його int [] mSolutionArray = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14}; shuffleArray (mSolutionArray); Log.i ( "Array", Arrays.toString (mSolutionArray));
підводимо підсумки
Пам'ятайте, що розмір масиву фіксується і не може змінюватися протягом його життєвого циклу. Якщо вам потрібно змінювати, то використовуйте ArrayList, який здатний автоматично виділяти додатковий простір, виділяючи новий блок пам'яті і переміщаючи в нього посилання зі старого.
При виході за кордон масиву відбувається виключення RuntimeException, що свідчить про помилку програміста.
Стандартна бібліотека Java містить статичний метод System.arraycopy (), який копіює масиви значніше швидше, ніж при ручному копіюванні в циклі for.
В аргументах arraycopy () передається вихідний масив, початкова позиція копіювання в вихідному масиві, приймальний масив, початкова позиція копіювання в приймальному масиві і кількість копійованих елементів. Будь-яке порушення меж масиву призведе до виключення.
Розробник Avi Yehuda написав програму , Яка обчислює час на копіювання за допомогою циклу for і за допомогою методу arraycopy () на прикладі з мільйоном елементів. Ручне копіювання у нього зайняло 182 мс, за допомогою методу arraycopy () - 12 мс. Різниця колосальна.
public class ArrayCopyTestActivity extends Activity {private static final int SIZE_OF_ARRAY = 1000000; private long time; @Override public void onCreate (Bundle savedInstanceState) {super.onCreate (savedInstanceState); setContentView (R.layout.activity_main); Integer [] sourceArray = new Integer [SIZE_OF_ARRAY]; Integer [] dst = new Integer [SIZE_OF_ARRAY]; fillArray (sourceArray); startBenchmark (); naiveCopy (sourceArray, dst); stopBenchmark (); startBenchmark (); System.arraycopy (sourceArray, 0, dst, 0, sourceArray.length); stopBenchmark (); } Private void naiveCopy (Integer [] src, Integer [] dst) {for (int i = 0; i <src.length; i ++) {dst [i] = src [i]; }} Private void fillArray (Integer [] src) {for (int i = 0; i <src.length; i ++) {src [i] = i; }} Private void startBenchmark () {time = System.currentTimeMillis (); } Private void stopBenchmark () {time = System.currentTimeMillis () - time; Log.d ( "array copy test", "time =" + time); }}
Пошук елементів строкового масиву за початковими символам
Припустимо, у нас є строковий масив і нам потрібно по перших символах знайти всі слова, які входять в даний масив.
// Сам метод public static ArrayList <String> searchFromStart (String [] inputArray, String searchText) {ArrayList <String> outputArray = new ArrayList <> (); for (int i = 0; i <inputArray.length; i ++) {if (searchText.compareToIgnoreCase (inputArray [i] .substring (0, searchText.length ())) == 0) {outputArray.add (inputArray [i ]); }} Return outputArray; } // Масив рядків final String [] catNamesArray = new String [] { "Рижик", "Барсик", "Мурзик", "Мурка", "Васька", "Томасіна", "Бобик", "Христина", "Пушок "," Серпанок "," Кузя "," Кітті "," Барбос "," Масяня "," Сімба "}; // Застосуємо метод. Шукаємо по буквах "мур": List <String> words = searchFromStart (catNamesArray, "мур"); Toast.makeText (getApplicationContext (), words.get (0) .toString () + ":" + words.get (1) .toString (), Toast.LENGTH_SHORT) .show ();
Поверне обліковий масив з двох елементів: Мурзик і Мурка.
клас Arrays
Клас java.util.Arrays призначений для роботи з масивами. Він містить зручні методи для роботи з цілими масивами:
- copyOf () - призначений для копіювання масиву
- copyOfRange () - копіює частину масиву
- toString () - дозволяє отримати всі елементи у вигляді одного рядка
- sort () - сортує масив методом quick sort
- binarySearch () - шукає елемент методом бінарного пошуку
- fill () - заповнює масив переданим значенням (зручно використовувати, якщо нам необхідно значення за замовчуванням для масиву)
- equals () - перевіряє на ідентичність масиви
- deepEquals () - перевіряє на ідентичність масиви масивів
- asList () - повертає масив як колекцію
Сортування масиву
Сортування (впорядкування за значеннями) масиву a проводиться методами Arrays.sort (a) і Arrays.sort (a, index1, index2). Перший метод впорядковує в порядку зростання весь масив, другий - частина елементів (від індексу index1 до індексу index2). Є і більш складні методи сортування. Елементи масиву повинні бути порівнювані (підтримувати операцію порівняння).
простий приклад
// задаємо числа в довільному порядку int [] numbers = new int [] {1, 23, 3, 8, 2, 4, 4}; // сортуємо Arrays.sort (numbers); // перевіряємо mInfoTextView.setText (Arrays.toString (numbers));
Сортуваннях масиву для ArrayAdapter
Масиви часто використовуються в адаптерах для заповнення даними компоненти Spinner, ListView і т.п.
Припустимо, у вас є масив рядків і його потрібно впорядкувати перед віддачею масиву адаптера ArrayAdapter. Це дозволить вивести рядки в упорядкованому вигляді, наприклад, в ListView:
String [] catsNames = { "Васька", "Кузя", "Барсик", "Мурзик", "Леопольд", "Бегемот", "Рижик", "Матроскін"}; // Сортуємо перед передачею адаптера Arrays.sort (catsNames); ArrayAdapter <String> adapter; adapter = new ArrayAdapter <> (this, android.R.layout.simple_list_item_1, catsNames); setListAdapter (adapter);
У методу sort () є перевантажені версії, де можна вказати діапазон масиву, в межах якого слід зробити сортування.
Метод Arrays.copyOf (орігінальний_массів, новая_дліна) - повертає масив-копію нової довжини. Якщо нова довжина менше оригінальної, то масив усікається до цієї довжини, а якщо більше, то доповнюється нулями.
// перший масив int [] anyNumbers = {2, 8, 11}; // копія другого масиву int [] luckyNumbers = Arrays.copyOf (anyNumbers, anyNumbers.length); luckyNumbers [2] = 25; mInfoTextView.setText ( "anyNumbers:" + Arrays.toString (anyNumbers) + "\ nluckyNumbers:" + Arrays.toString (luckyNumbers));
Тепер перший масив залишиться без змін, а з другим масивом робіть що хочете. Дивимося на результат.
anyNumbers: [2, 8, 11]; luckyNumbers: [2, 8, 25];
Можна створити збільшену копію, коли копіюються всі значення з маленького масиву, а решту місць заповнюються початковими значеннями, наприклад, нулями.
// три елементи int [] small_array = {1, 2, 3}; // створимо масив з п'ятьма елементами int [] big_array = Arrays.copyOf (small_array, 5); mInfoTextView.setText ( "big_array:" + Arrays.toString (big_array));
Отримаємо результат:
big_array: [1, 2, 3, 0, 0]
Метод Arrays.copyOfRange (орігінальний_массів, начальний_індекс, конечний_індекс) - також повертає масив-копію нової довжини, при цьому копіюється частина оригінального масиву від початкового індексу до кінцевого -1.
// Масив з чотирьох елементів String [] array_1 = { "Васька", "Мурзик", "Рижик", "Барсик"}; // Сортування масиву Arrays.sort (array_1); // Копіюємо перші три елементи масиву в другій масив String [] array_2 = Arrays.copyOf (array_1, 3); // Копіюємо потрібні елементи з першого масиву // в діапазоні від другого елементу до останнього в третій масив String [] array_3 = Arrays.copyOfRange (array_1, 2, array_1.length); Log.i (TAG, Arrays.toString (array_1)); Log.i (TAG, Arrays.toString (array_2)); Log.i (TAG, Arrays.toString (array_3));
Метод Arrays.toString ()
Якщо використовувати виклик методу toString () безпосередньо у масиву, то отримаєте щось незрозуміле і нечитабельним.
String [] catNames = { "Васька", "Мурзик", "Рижик", "Барсик"}; Log.i (TAG, catNames.toString ()); // поверне [Ljava.lang.String; @ 4222bd88
Метод Arrays.toString (масив) повертає строкове представлення масиву зі строковим поданням елементів, ув'язнених в квадратні дужки. У прикладах вище ми вже викликали даний метод.
Метод deepToString () зручний для виведення багатовимірних масивів. Цей метод ми також вже використовували вище.
Метод Arrays.fill () - наповнення масиву однаковими даними
Метод Arrays.fill () дозволяє швидко заповнити масив однаковими значеннями. У методу є вісімнадцять перевантажених версій для різних типів і об'єктів.
Метод fill () просто дублює одне задане значення в кожному елементі масиву (в разі об'єктів копіює одну посилання в кожен елемент):
int size = 4; boolean [] test1 = new boolean [size]; int [] test2 = new int [size]; String [] test3 = new String [size]; Arrays.fill (test1, true); // привласнюючи всім true Toast.makeText (getApplicationContext (), Arrays.toString (test1), Toast.LENGTH_LONG) .show (); Arrays.fill (test2, 9); // присвоюємо всім 9 Toast.makeText (getApplicationContext (), Arrays.toString (test2), Toast.LENGTH_LONG) .show (); Arrays.fill (test3, "Мяу!"); // Ну ви зрозуміли Toast.makeText (getApplicationContext (), Arrays.toString (test3), Toast.LENGTH_LONG) .show ();
Запустивши код, ви побачите, що на екрані по черзі виводяться значення:
[True, true, true, true] [9, 9, 9, 9] [Мяу !, Мяу !, Мяу !, Мяу!]
Можна заповнити даними в потрібному інтервалі за два проходи:
int size = 4; String [] test3 = new String [size]; Arrays.fill (test3, "Мяу!"); Arrays.fill (test3, 2, 3, "Гав!"); Toast.makeText (getApplicationContext (), Arrays.toString (test3), Toast.LENGTH_LONG) .show ();
Спочатку масив заповниться нявканням кота 4 рази, а потім на третю позицію потрапляє слово Гав! :
[Мяу !, Мяу !, Гав !, Мяу!]
Як бачите, метод заповнює весь масив, або діапазон його елементів. Але одержувані однакові дані не надто цікаві для дослідів, але знадобляться для швидких експериментів.
Метод equals () - порівняння масивів
Клас Arrays містить метод equals () для перевірки на рівність цілих масивів. Щоб два масиви вважалися рівними, вони повинні містити однакову кількість елементів, і кожен елемент повинен бути еквівалентний відповідному елементу іншого масиву.
Напишемо код в своїй навчальній програмі.
// Створюємо два масиви int [] a1 = new int [10]; int [] a2 = new int [10]; // заповнюємо їх дев'ятками Arrays.fill (a1, 9); Arrays.fill (a2, 9); mInfoTextView.setText ( "Порівняємо:" + Arrays.equals (a1, a2));
Ми створили два масиви і заповнили їх однаковими числами. При порівнянні ми отримаємо true. Додамо в код рядок коду, яка замінить один елемент у другому масиві:
// Змінимо один елемент у другого масиву a2 [3] = 11; mInfoTextView.setText ( "Порівняємо:" + Arrays.equals (a1, a2));
Тепер при порівнянні видаватиметься false.
завдання
Вирішіть завдання. Відповіді доступні зареєстрованим користувачам.
Є масив з чотирьох чисел int [] numbers = {3, 9, 11, 15}; . Поміняйте місцями перший і другий елемент масиву. ( відповідь )
Створіть масив з усіх парних чисел від 2 до 30 і виведіть елементи масиву на екран.
Створіть масив з усіх непарних чисел від 1 до 99, виведіть його на екран у рядок, а потім цей же масив виведіть на екран теж в рядок, але в зворотному порядку (99 97 95 93 ... 7 5 3 1).
Створіть масив з 20-ти перших чисел Фібоначчі і виведіть його на екран. Нагадуємо, що перший і другий члени послідовності рівні одиницям, а кожен наступний - сумою двох попередніх.
Знайти максимальне значення з масиву
Завдання: Є статистика, скільки мишей впіймав кіт Барсик за рік по місяцях у вигляді масиву:
int [] mice = new int [] {4, 9, 3, 22, 5, 18, 25, 7, 11, 15, 5, 19};
Написати метод getMax (), який обчислює максимальне значення з масиву. Ну і метод getMin () для знаходження мінімального значення.
відповідь
Знайти три найбільших числа з масиву
Схожа завдання - знайти три найбільших числа з масиву mice (попередня задача).
відповідь
Перестановка елементів масиву в зворотному порядку
Завдання: Є масив, потрібно переставити елементи масиву в зворотному порядку.
int [] mice = new int [] {4, 9, 3, 22, 5, 18, 25, 7, 11, 15, 5, 19};
відповідь
Помістити нулі в кінець масиву
Дан масив з числами 5, 4, 3, 0, 6, 0, 0, 5, 6, 0, 25, 0, 8, 7, 3, 0, 1, 1, 0, 6, 4. Перемістити всі нулі в кінець масиву.
відповідь
Помістити нулі в початок масиву
Дан масив з числами 5, 4, 3, 0, 6, 0, 0, 5, 6, 0, 25, 0, 8, 7, 3, 0, 1, 1, 0, 6, 4. Перемістити всі нулі в початок масиву.
відповідь
Знайти індекс числа з масиву
Є масив, потрібно визначити індекс числа, який входить в цей масив.
відповідь
Додаткове читання
ArrayList
Реклама
жалюзі горизонтальні вартість доповідна описание тканинні ролети замовити; лампа бактерицидна дарсонваль лікування волосся bactosfera дарсонваль для волосся
Відчуваєте різницю?