Питання Як оголосити і ініціалізувати масив у Java?


Як оголосити і ініціалізувати масив у Java?


1617
2017-07-29 14:22


походження


Ява 10 дозволяє оголосити масив через var? - gstackoverflow


Відповіді:


Ви можете або використовувати декларацію масиву або буквеніе масиву (але тільки тоді, коли ви оголошуєте та впливаєте на змінну відразу, масив літералів не може бути використаний для перепризначення масиву).

Для примітивних типів:

int[] myIntArray = new int[3];
int[] myIntArray = {1,2,3};
int[] myIntArray = new int[]{1,2,3};

Наприклад, для класів String, це ж:

String[] myStringArray = new String[3];
String[] myStringArray = {"a","b","c"};
String[] myStringArray = new String[]{"a","b","c"};

Третій спосіб ініціалізації корисний, коли ви декларуєте масив спочатку, а потім ініціалізуєте його. Обкладинка тут потрібна.

String[] myStringArray;
myStringArray = new String[]{"a","b","c"};

2192
2017-07-09 21:59



Яка мета мати як другий, так і третій спосіб зробити це? - Quazi Irfan
@iamcreasy Схоже, що другий спосіб не працює з повернутими твердженнями. return {1,2,3} дає помилку, в той час як return new int[]{1,2,3} працює нормально (з урахуванням того, що ваша функція повертає цілий масив). - Skylar Ittner
@SkylarMT Але ми все ще можемо використовувати перший спосіб використання з оператором return. - Quazi Irfan
@Imcreasy Я нещодавно написав функцію, яка повернула масив входів. Якщо у функції виникла помилка, я хотів, щоб він повернув певне значення, але функція, необхідна для повернення масиву. Який шлях працює для одержання довідника? Тільки третій. - Skylar Ittner
@apadana У другому випадку ви створюєте анонімний об'єкт, який визначається лише в області обкладинки (функція або інше). Після повернення до абонента, він більше не дійсний. Використовуючи нове ключове слово, ви виділяєте новий об'єкт з купи, і він дійсний за межами визначеної сфери. - teukkam


Існує два типи масиву.
 

Одномісний масив

Синтаксис для значень за замовчуванням:

int[] num = new int[5];

Або (менш бажано)

int num[] = new int[5];

Синтаксис з заданими значеннями (змінна / поле ініціалізації):

int[] num = {1,2,3,4,5};

Або (менш бажано)

int num[] = {1, 2, 3, 4, 5};

Примітка. Для зручності int [] num є кращим, оскільки він чітко говорить, що ви говорите тут про масив. Інакше ніякої різниці. Не зовсім

Багатомірний масив

Декларація

int[][] num = new int[5][2];

Or

int num[][] = new int[5][2];

Or

int[] num[] = new int[5][2];

Ініціалізація

 num[0][0]=1;
 num[0][1]=2;
 num[1][0]=1;
 num[1][1]=2;
 num[2][0]=1;
 num[2][1]=2;
 num[3][0]=1;
 num[3][1]=2;
 num[4][0]=1;
 num[4][1]=2;

Or

 int[][] num={ {1,2}, {1,2}, {1,2}, {1,2}, {1,2} };

Захаращений масив (або не-прямокутний масив)

 int[][] num = new int[5][];
 num[0] = new int[1];
 num[1] = new int[5];
 num[2] = new int[2];
 num[3] = new int[3];

Отже, ми чітко визначаємо колони.
Інший спосіб: 

int[][] num={ {1}, {1,2}, {1,2,3,4,5}, {1,2}, {1,2,3} };

Для доступу:

for (int i=0; i<(num.length); i++ ) {
    for (int j=0;j<num[i].length;j++)
        System.out.println(num[i][j]);
}

Альтернативно:

for (int[] a : num) {
  for (int i : a) {
    System.out.println(i);
  }
}

Прокопані масиви - це багатовимірні масиви.
Для пояснення див. Багатовимірний масив деталі на офіційні підручники java


222
2017-07-29 14:29



Чи не перший призведе до нульового / порожнього масиву, а не до масиву з значеннями за замовчуванням? - vipin8169
Я згоден з цього приводу, і ми можемо додати ще одну функцію, ми можемо динамічно змінювати розмір. - AdamIJK
Я міг би сперечатися з вами на тій точці, що багатовимірний масив є іншим "типом" масиву. Це просто термін, який використовується для опису масиву, який містить інші масиви. Обидва зовнішні масиви та внутрішні масиви (і ті, між ними, якщо вони існують) - це лише регулярні масиви. - tradeJmark


Type[] variableName = new Type[capacity];

Type[] variableName = {comma-delimited values};



Type variableName[] = new Type[capacity]; 

Type variableName[] = {comma-delimited values};

також є дійсним, але я віддаю перевагу дужках після типу, тому що простіше побачити, що тип змінної насправді є масивом.


116
2017-07-29 14:28



Я згоден з цього приводу. Тип змінної не "TYPE", але фактично TYPE [], тому має сенс писати це так для мене. - Chet
Стиль Google припустити це теж. - wener
Зауважте, що int[] a, b; не буде таким же, як int a[], b;, помилка легко зробити, якщо ви використовуєте останню форму. - Jeroen Vannevel


Існують різні способи, за допомогою яких ви можете оголосити масив у Java:

float floatArray[]; // Initialize later
int[] integerArray = new int[10];
String[] array = new String[] {"a", "b"};

Ви можете знайти додаткову інформацію в Сонце підручник сайт і JavaDoc.


32
2017-07-29 14:29





Я вважаю корисним, якщо ви розумієте кожну частину:

Type[] name = new Type[5];

Type[] є тип з змінна Назва називається ("ім'я" називається ідентифікатор) Буквальний "Type" є базовим типом, а дужки - це тип масиву цієї бази. Типи масивів, в свою чергу, мають власні типи, що дозволяє створювати багатомірні масиви Type[][] (масив типу Тип []). Ключове слово new каже виділити пам'ять для нового масиву. Число між дужкою говорить, наскільки велика буде новий масив і скільки пам'яті потрібно виділити. Наприклад, якщо Java знає базовий тип Type займає 32 байти, і ви хочете мати масив розміром 5, він повинен внутрішньо виділити 32 * 5 = 160 байт.

Ви також можете створювати масиви з вже існуючими значеннями, такими як

int[] name = {1, 2, 3, 4, 5};

який не тільки створює порожній простір, але і заповнює його цими значеннями. Java може сказати, що примітиви - це цілі числа, і їх є 5, тому розмір масиву можна визначити неявно.


26
2018-06-04 06:02



Так що не потрібно включати int[] name = new int[5] ? - Cookie Monster


Нижче показано декларування масиву, але масив не ініціалізується:

 int[] myIntArray = new int[3];

Нижче показано декларацію, а також ініціалізацію масиву:

int[] myIntArray = {1,2,3};

Тепер також показано декларацію, а також ініціалізацію масиву:

int[] myIntArray = new int[]{1,2,3};

Але цей третій показує властивість анонімного створення масив-об'єкта, який вказує еталонну змінну "myIntArray", так що якщо ми пишемо лише "new int [] {1,2,3};" то саме так можна створити анонімний масив-об'єкт.

Якщо ми просто пишемо:

int[] myIntArray;

це не декларування масиву, але наступне твердження робить зазначену вище декларацію завершеною:

myIntArray=new int[3];

26
2017-07-29 14:25



Існує абсолютно ніякої різниці між другим і третім підходами, крім цього другого підходу тільки працює, коли ви також оголошуєте змінну. Не зрозуміло, що ви маєте на увазі під назвою "показує властивість анонімного створення об'єкта масивів", але вони насправді є еквівалентними частинами коду. - Jon Skeet
Також перший фрагмент робить ініціалізувати масив - це гарантовано мати значення 0 для кожного елемента масиву. - Jon Skeet


Альтернативно

// Either method works
String arrayName[] = new String[10];
String[] arrayName = new String[10];

Це оголошує масив, який викликається arrayName розміром 10 (у вас є елементи від 0 до 9 для використання).


22
2017-07-29 15:56



Який стандарт для використання? Я тільки що відкрив перший, і я вважаю це жахливо помилковим: | - Anti Earth
Для чого варто сказати, що другий спосіб більш характерний для Java і що він краще передає те, що відбувається; як масив, пов'язаний з типом змінної була віддана як. - Celeritas
Для сторонньої примітки: Мова, що має більше семантики для оголошення однієї речі, що означає поганий дизайн мови. - Muhammad Suleman


Крім того, у випадку, якщо ви хочете щось більш динамічне, є інтерфейс List. Це також не буде працювати, але є більш гнучким:

List<String> listOfString = new ArrayList<String>();

listOfString.add("foo");
listOfString.add("bar");

String value = listOfString.get(0);
assertEquals( value, "foo" );

22
2018-01-28 19:19



Що таке "<>" у списку, який ви створили? - CyprUS


Є два основні способи створення масиву:

Цей, для порожнього масиву:

int[] array = new int[n]; // "n" being the number of spaces to allocate in the array

І цей, для ініціалізованого масиву:

int[] array = {1,2,3,4 ...};

Ви також можете зробити багатомірні масиви, як це:

int[][] array2d = new int[x][y]; // "x" and "y" specify the dimensions
int[][] array2d = { {1,2,3 ...}, {4,5,6 ...} ...};

12
2018-05-23 19:56