CodeGym /Java блог /Случаен /Масиви в Java
John Squirrels
Ниво
San Francisco

Масиви в Java

Публикувано в групата
Представете си шкафове в складово помещение. Всеки от тях има свой собствен номер и всеки от тях съхранява няHowъв багажен обект. Или винена листа, където всеки вид вино е номериран и поръчвате, като посочите номера на вашето питие. Или списък със студенти, в който „Adams“ е записано на първа позиция, а „Zimmer“ е последно. Или списък на пътниците в самолета, на всеки от които е определено номерирано място. В Java често се използват масиви за работа с такива структури, т.е. набори от хомогенни данни.

Масиви в курса CodeGym

В CodeGym започвате да работите с масиви на ниво 7 от търсенето на Java Syntax. На тях са посветени три урока , Howто и 8 задачи на различни нива, за да затвърдите уменията си за работа с масиви. Но ще се сблъскате с масиви много пъти по време на курса (по-специално, класът Array ще бъде изучаван в търсенето на Java Collections и като част от бъдещата ви работа.

Какво е масив?

Масивът е структура от данни, която съхранява елементи от един и същи тип. Можете да си представите това като набор от номерирани клетки. Можете да поставите някои данни във всяка клетка (по един елемент от данни на клетка). Достъп до конкретна клетка се осъществява чрез нейния номер. Номерът на елемент в масива се нарича още индекс . В Java масивът е хомогенен, т.е. всички негови клетки съдържат елементи от един и същи тип. По този начин, масив от цели числа съдържа само цели числа ( int ), масив от низове — само низове, а масив от екземпляри на клас Dog , който сме създали, ще съдържа само обекти Dog . С други думи, Java няма да ни позволи да поставим цяло число в първата клетка на масива, низ във втората и куче в третата.Масиви в Java - 2

Деклариране на масив

Как се декларира масив?

Както всяка променлива, масивът трябва да бъде деклариран в Java. Това може да стане по един от двата начина. Те са еквивалентни, но първият начин е по-съвместим със стила на Java. Второто е наследство от езика C: много програмисти на C преминаха към Java и за тяхно удобство беше запазен алтернативен метод. Таблицата показва двата начина за деклариране на масив в Java:
Не. Деклариране на масив, синтаксис на Java Примери Коментирайте
1.
dataType[] arrayName;

int[] myArray;

Object[] 
arrayOfObjects;  
Препоръчително е да декларирате масив по този начин. Това е стил Java.
2.
dataType arrayName[];

int myArray[];

Object 
arrayOfObjects[];
Метод за деклариране на масив, наследен от C/C++, работи в Java
И в двата случая dataType е типът на променливите в масива. В примерите декларирахме два масива. Единият ще съхранява int s, а другият — Object обекти. По този начин декларацията на масив има име и тип (типа на елементите на масива). ArrayName е името на масива.

Създаване на масив

Как се създава масив?

Като всеки друг обект, можете да създадете Java масив, т.е. да запазите място в паметта за него, като използвате оператора new . Така се прави:

new typeOfArray[length]; 
където typeOfArray е типът на масива, а length е неговата дължина (т.е. броят на клетките), изразен като цяло число ( int). Но имайте предвид, че тук само разпределихме памет за масива - не сме свързали декларирания масив с никоя предварително декларирана променлива. Обикновено масив първо се декларира и след това се инстанцира, например:

int[] myArray; // Array declaration
myArray = new int[10]; // Create (allocate memory for) an array of 10 ints
Тук създадохме масив от цели числа, наречен myArray , информирайки компилатора, че се състои от 10 клетки (всяка от които ще съдържа цяло число). Много по-често обаче е да се използва следният съкратен синтаксис за създаване на масив веднага след декларирането му:

int[] myArray = new int [10]; // Declare the array and allocate memory "in one blow"
Моля обърнете внимание:След като се създаде масив с помощта на оператора new , неговите клетки съдържат стойности по подразбиране. За числови типове (Howто в нашия пример) стойността по подразбиране е 0, за булевия тип е false , а за референтните типове е null . По този начин, след изпълнение на това изявление

int[] myArray = new int[10];
получаваме масив от десет цели числа и докато програмата не направи нещо, за да промени стойностите, всяка клетка съдържа 0.

Можете да намерите повече информация за масивите в статията " Нещо за масивите "

Дължина на масива в Java

Както казахме по-горе, дължината на масива е броят на елементите, които масивът е проектиран да съдържа. Дължината на масив не може да бъде променяна, след като е създаден. Моля обърнете вниманиече елементите на масива се номерират, започвайки от нула в Java. Така, ако имаме масив от 10 елемента, тогава индексът на първия елемент е 0, а индексът на последния е 9. Масиви в Java - 3Можете да получите дължината на масива, като използвате променливата за дължина . Например:

int[] myArray = new int[10]; // Create an int array for 10 elements and name it myArray
System.out.println(myArray.length); // Display the array's length, i.e. the number of elements we can put into the array
Изход:

10

Инициализиране на масив и достъп до неговите елементи

Сега знаем How да създадем масив в Java. Процесът ни получава не празен масив, а масив, пълен със стойности по подразбиране. Например, за int масив това е 0 и ако имаме масив от произволен референтен тип, тогава стойността по подразбиране във всяка клетка е null . Осъществяваме достъп до елемент от масив (например, за да зададем стойността му, да го покажем на екрана or да извършим няHowва операция с него) чрез неговия индекс. Инициализацията на масив е процес на попълване на масив със специфични стойности (различни от стойностите по подразбиране). Пример: нека създадем низов масив за 4-те сезона и да го попълним с имената на сезоните.

String[] seasons = new String[4]; /* Declare and create an array. Java allocates memory for an array of 4 strings, and each cell is set to null (since String is a reference type) */ 

seasons[0] = "Winter"; /* We set the first cell, i.e. the cell with index zero, to "Winter". Here we access the zeroth element of the array and write a specific value to it. */ 
seasons[1] = "Spring"; // We follow a similar procedure for the cell with index 1 (the second cell)
seasons[2] = "Summer"; // ... index 2
seasons[3] = "Autumn"; // and finally, index 3
Сега имената на сезоните са записани в четирите клетки на нашия масив. Можем да инициализираме масива по различен начин, комбинирайки декларацията и инициализацията:

String[] seasons = new String[] {"Winter", "Spring", "Summer", "Autumn"};
Нещо повече, новият оператор може да бъде пропуснат:

String[] seasons = {"Winter", "Spring", "Summer", "Autumn"};

Как се показва масив на екрана в Java?

Можете да показвате елементи от масива на екрана (т.е. на конзолата) с помощта на for цикъл. Друг, по-кратък начин за показване на масив ще бъде разгледан в параграфа, озаглавен " Полезни методи за работа с масиви ". Междувременно вижте този пример, където масив се показва с помощта на цикъл:

String[] seasons = new String {"Winter", "Spring", "Summer", "Autumn"}; 
for (int i = 0; i < 4; i++) {
System.out.println(seasons[i]); 
}
Програмата ще покаже следното:

Winter 
Spring 
Summer 
Autumn

Едномерни и многомерни масиви в Java

Но Howво ще стане, ако искаме да създадем не масив от числа, низове or други обекти, а по-скоро масив от масиви? Java ви позволява да направите това. Типът масив, с който вече сме запознати ( int[] myArray = new int[8] ), е известен като едномерен масив. Но масив от масиви се нарича двумерен масив. Това е като table, която има номер на ред и номер на колона. Или, ако сте научor основите на линейната алгебра, можете да мислите за нея като за матрица. Масиви в Java - 4Защо имаме нужда от такива масиви? Е, да програмирате матрици и таблици, Howто и други обекти, които имат подобна структура. Например шахматната дъска може да бъде представена от масив 8x8. Многоизмерният масив се декларира и създава, Howто следва:

Int[][] myTwoDimentionalArray = new int[8][8];
Този масив има точно 64 елемента: myTwoDimentionalArray[0][0] , myTwoDimentionalArray[0][1] , myTwoDimentionalArray[1][0] , myTwoDimentionalArray[1][1] и така нататък до myTwoDimentionalArray[7][7] . Така че, ако го използваме за представяне на шахматна дъска, тогава A1 съответства на myTwoDimentionalArray[0][0] и E2 съответства на myTwoDimenttionalArray[4][1] . Но докъде можем да прокараме това? В Java можете да посочите масив от масиви... масив от масиви от масиви и т.н. Разбира се, триизмерните и по-високомерните масиви се използват много рядко. Въпреки това можете да използвате триизмерен масив, за да програмирате кубче на Рубик например.

Полезни методи за работа с масиви

Java има клас java.util.Arrays за работа с масиви. Като цяло най-често срещаните операции, извършвани върху масиви, са инициализация (попълване с елементи), извличане на елемент (по индекс), сортиране и търсене. Търсенето и сортирането на масиви са теми за друг ден. От една страна, добра практика е сами да напишете няколко алгоритми за търсене и сортиране. От друга страна, всички най-добри алгоритми вече са внедрени и включени в стандартните Java библиотеки и можете да ги използвате законно. Ето три полезни метода в този клас.

Сортиране на масив

Методът void sort(int[] myArray, int fromIndex, int toIndex) сортира целочислен масив or подмасив във възходящ ред.

Търсене на елемент в масив

int binarySearch(int[] myArray, int fromIndex, int toIndex, int ключ) . Този метод търси ключовия елемент в сортиран масив or подмасив myArray , от fromIndex до toIndex . Ако елементът бъде намерен, той връща своя индекс. В противен случай връща (-fromIndex)-1 .

Преобразуване на масив в низ

Методът String toString(int[] myArray) преобразува масив в низ. В Java масивите не заместват toString() . Това означава, че ако се опитате да покажете цял масив наведнъж (System.out.println(myArray)), а не един елемент наведнъж, Howто в параграфа, озаглавен „ Показване на масив на екрана “, ще получите име на класа и шестнадесетичен хеш на масива (дефиниран от Object.toString() ). Ако сте начинаещ, може да не разберете обяснението за метода toString . Първоначално не е необходимо, но използването на този метод улеснява показването на масив. Java ви позволява лесно да показвате масив, без да използвате цикъл. Примерът по-долу демонстрира това.

Пример за използване на sort, binarySearch и toString

Нека създадем масив от цели числа, да го покажем с помощта на toString , да го сортираме с помощта на метода за сортиране и след това да намерим няHowво число в него.

class Main {
    public static void main(String[] args) {
        int[] array = {1, 5, 4, 3, 7}; // Declare and initialize the array
        System.out.println(array); // Try to display our array without using the toString method — the result is a hexadecimal number
        System.out.println(Arrays.toString(array)); // Display the array correctly 
        Arrays.sort(array, 0, 4); // Sort the entire array from the zeroth to the fourth element
        System.out.println(Arrays.toString(array)); // Display the sorted array
        int key = Arrays.binarySearch(array, 5); // Look for the number 5 in the sorted array. 
        // The binarySearch method will return the index of the array element we are searching for
        System.out.println(key); // Display the index of the number we searched for 
System.out.println(Arrays.binarySearch(array, 0)); // Now try to find a number that isn't in the array, 
        // and immediately display the result

    }
}
Изход:

[I@1540e19d 
[1, 5, 4, 3, 7] 
[1, 3, 4, 5, 7] 
3 
-1
Първият низ е опит за показване на масива без използване на toString . Вторият е масивът, показан с помощта на toString . Третият е сортираният масив. Четвъртият е индексът на числото, което търсихме (5) в сортирания масив (не забравяйте, че броим от нула, така че индексът на четвъртия елемент на масива е 3). В петия низ виждаме -1. Това е невалиден индекс на масив. Той сигнализира, че търсеното от нас число (в този случай 0) не е в масива.

Повече за методите в класа Array

Клас Arrays и неговата употреба — Тази статия описва някои методи в класа Array
Класът Arrays има 18 важни метода за работа с масиви

Масиви накратко

  • Съществени характеристики на масива: типът на данните, поставени в него, неговото име и неговата дължина.
    Последното свойство се определя при създаването на масива (когато паметта е разпределена за масива). Първите две свойства се определят при декларирането на масива.

  • Размерът на масива (броят клетки) трябва да бъде int

  • Невъзможно е да промените дължината на масив, след като е създаден.

  • Елементът на масива може да бъде достъпен чрез неговия индекс.

  • Елементите в масивите, Howто всичко останало в Java, се номерират, започвайки от нула.

  • След като се създаде масив, той се запълва със стойности по подразбиране.

  • Масивите в Java не са същите като масивите в C++. Те са почти като указатели към динамични масиви.

Полезни материали за масиви

Искате ли да знаете повече за масивите? Вижте статиите по-долу. Има много интересни и полезни материали по тази тема.
Коментари
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION