Kaip deklaruoti ir inicijuoti masyvą „Java“?

Kaip deklaruoti ir inicijuoti masyvą „Java“?

1677
29 июля '09 в 17:22 2009-07-29 17:22 suteikta geriausia paroda liepos 29 d., 09:17, 2009-07-29 17:22
@ 19 atsakymų

Galite naudoti masyvo deklaraciją arba matricos raštą (bet tik tuomet, kai tuoj pat deklaruojate ir veikia kintamasis, masyvo literatūros negalima naudoti, kad pakeistų masyvą).

Primityviems tipams:

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

Klasėms, pvz., String , tai yra tas pats:

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

Trečiasis iniciacijos būdas yra naudingas, kai pirmą kartą deklaruojate masyvą ir tada jį inicijuojate. Vaidina čia.

 String[] myStringArray; myStringArray = new String[]{"a","b","c"}; 
2249
29 июля '09 в 17:25 2009-07-29 17:25 atsakymas pateiktas glmxndr liepos 29 d., 17:25, 2009-07-29 17:25

Yra dviejų tipų masyvai.

Vieno matmens masyvas

Numatytoji sintaksė yra:

 int[] num = new int[5]; 

Arba (mažiau pageidaujama)

 int num[] = new int[5]; 

Sintaksė su nurodytomis reikšmėmis (kintamojo / lauko inicijavimas):

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

Arba (mažiau pageidaujama)

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

Pastaba Kad būtų patogiau, pirmenybė teikiama int [] numeriui, nes ji aiškiai nurodo, apie ką kalbate čia. Priešingu atveju nėra jokio skirtumo. Ne visai.

Daugiamatė masyvas

Deklaracija

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

arba

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

arba

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

Inicijavimas

  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; 

arba

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

Suapvalinta skiltis (arba netaisyklinga matrica)

  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]; 

Taigi čia mes aiškiai apibrėžiame stulpelius.
Kitas būdas:

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

Jei norite pasiekti:

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

Arba:

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

Ragged masyvai yra daugiamatės matricos.
Norėdami paaiškinti, žr. Išsamią daugialypių matricų informaciją oficialiose Java pamokose.

226
10 июля '13 в 0:59 2013-07-10 00:59 atsakymą pateikė „ Isabella Engineer“ liepos 10 d. 13 val. 0:59 2013-07-10 00:59
 Type[] variableName = new Type[capacity]; Type[] variableName = {comma-delimited values}; Type variableName[] = new Type[capacity]; Type variableName[] = {comma-delimited values}; 

taip pat galioja, bet norėčiau, kad po tipo būtų skliausteliuose, nes lengviau matyti, kad kintamojo tipas iš tikrųjų yra masyvas.

117
29 июля '09 в 17:29 2009-07-29 17:29 atsakymas pateikiamas „ Nate“ liepos 29, 09 d. 17:29 2009-07-29 17:29

Yra įvairių būdų, kaip paskelbti masyvą „Java“:

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

Daugiau informacijos rasite „ Sun“ ir „ JavaDoc“ svetainėje .

32
29 июля '09 в 17:28 2009-07-29 17:28 atsakymą pateikė Anirudh liepos 29 d. , 09:17 , 2009-07-29 17:28

Rodoma ši masyvo deklaracija, tačiau masyvas nėra inicijuotas:

  int[] myIntArray = new int[3]; 

Toliau pateikiama deklaracija ir masyvo inicijavimas:

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

Dabar taip pat parodoma deklaracija ir masyvo inicijavimas:

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

Tačiau šis trečiasis rodo anoniminio masyvo objekto sukūrimo savybę, kurią nurodo nuorodinis kintamasis "myIntArray", taigi, jei rašome tik "naujas int [] {1,2,3};" tada jis gali būti anoniminis masyvo objektas.

Jei mes tiesiog rašome:

 int[] myIntArray; 

tai nėra masyvo deklaracija, tačiau šis pareiškimas užbaigia šią frazę:

 myIntArray=new int[3]; 
26
04 июня '13 в 9:02 2013-06-04 09:02 atsakė Amit Bhandari'ui birželio 14 d. 13 val. 2013-02-04 09:02

Man naudinga, jei suprantate kiekvieną dalį:

 Type[] name = new Type[5]; 

Type[] yra kintamojo, vadinamo pavadinimu, tipas (pavadinimas "vadinamas identifikatoriumi"). Žodinis „tipas“ yra bazinis tipas, o skliausteliuose nurodoma, kad tai yra šios bazės masyvo tipas. Masyvų rūšys savo ruožtu yra jų pačios, leidžiančios sukurti Type[][] tipo (daugelio tipų Type[][] tipo) daugialypius matricus. new raktinis žodis rodo atminties paskirstymą naujai masyvui. Skaičius tarp skliausteliuose rodo, kiek didelė bus nauja masyvas ir kiek atminties bus priskirta. Pavyzdžiui, jei „Java“ žino, kad pagrindinio tipo Type yra 32 baitai, ir jums reikia 5 dydžio matricos, ji turi viduje skirti 32 * 5 = 160 baitų.

Taip pat galite sukurti masyvus su jau esamomis reikšmėmis, pvz.,

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

kuri ne tik sukuria tuščią erdvę, bet ir ją pildo. „Java“ gali pasakyti, kad primityvūs yra sveikieji skaičiai ir kad yra 5, todėl masyvo dydį galima nustatyti netiesiogiai.

26
29 июля '09 в 17:29 2009-07-29 17:29 atsakymą pateikė „ Chet “ liepos 29 d., 17:29, 2009-07-29 17:29

Be to, jei norite kažką dinamiškesnio, yra sąsaja su sąrašu. Tai neveiks, bet lanksčiau:

 List<String> listOfString = new ArrayList<String>(); listOfString.add("foo"); listOfString.add("bar"); String value = listOfString.get(0); assertEquals( value, "foo" ); 
22
29 июля '09 в 18:56 2009-07-29 18:56 atsakymą pateikė Dave , liepos 29 d., 09:18, 2009-07-29 18:56

Arba,

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

Deklaruoja masyvą, pavadintą arrayName dydis yra 10 (naudoti elementus nuo 0 iki 9).

22
29 июля '09 в 17:25 2009-07-29 17:25 Atsakymas Thomasui Owensui liepos 29 d., 09:17, 2009-07-29 17:25

Yra du pagrindiniai būdai sukurti masyvą:

Tai tuščiajai masyvai:

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

Ir tai inicijuotos masyvo atveju:

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

Taip pat galite sukurti daugiamatį matricą, pavyzdžiui:

 int[][] array2d = new int[x][y]; // "x" and "y" specify the dimensions int[][] array2d = { {1,2,3 ...}, {4,5,6 ...} ...}; 
12
28 янв. atsakymas suteiktas codecubed 28 sausis 2016-01-28 22:19 '16 at 22:19 PM 2016-01-28 22:19

Paimkite primityvų tipą int . Yra keletas būdų, kaip paskelbti masyvą ir int :

 int[] i = new int[capacity]; int[] i = new int[] {value1, value2, value3, etc}; int[] i = {value1, value2, value3, etc}; 

kur visais šiais atvejais galite naudoti int i[] vietoj int[] i .

Su refleksija, galite naudoti (Type[]) Array.newInstance(Type.class, capacity);

Atkreipkite dėmesį, kad metodo parametruose ... rodomi variable arguments . Tiesą sakant, bet koks skaičius parametrų yra gerai. Lengviau paaiškinti kodu:

 public static void varargs(int fixed1, String fixed2, int... varargs) {...} ... varargs(0, "", 100); // fixed1 = 0, fixed2 = "", varargs = {100} varargs(0, "", 100, 200); // fixed1 = 0, fixed2 = "", varargs = {100, 200}; 

Viduje varargs metodas, jis traktuojamas kaip normalus int[] . Type... gali būti naudojamas tik metodų parametruose, todėl int... i = new int[] {} nesudarys.

Atkreipkite dėmesį, kad praėjus int[] metodui (arba bet kuriam kitam Type[] ) negalite naudoti trečiojo metodo. Pranešime int[] i = *{a, b, c, d, etc}* kompiliatorius mano, kad {...} reiškia int[] . Bet tai yra todėl, kad skelbiate kintamąjį. Kai metodas perduodamas metodui, deklaracija turi būti new Type[capacity] arba new Type[capacity] new Type[] {...} .

Daugiamatės matricos

Daugialypės matricos yra daug sunkiau valdomos. Iš esmės 2D masyvas yra masyvų masyvas. int[][] reiškia int[] s masyvą. Svarbiausia yra tai, kad jei int[][] deklaruota kaip int[x][y] , maksimalus indeksas yra i[x-1][y-1] . Iš esmės, int[3][5] stačiakampis yra:

 [0, 0] [1, 0] [2, 0] [0, 1] [1, 1] [2, 1] [0, 2] [1, 2] [2, 2] [0, 3] [1, 3] [2, 3] [0, 4] [1, 4] [2, 4] 
9
23 мая '15 в 22:56 2015-05-23 22:56 atsakymą pateikė „ HyperNeutrino“ gegužės 23 d., 15 d., 10:56 val. 2015-05-23 22:56

Jei norite sukurti matricas naudodami atspindžius, galite tai padaryti:

  int size = 3; int[] intArray = (int[]) Array.newInstance(int.class, size ); 
7
20 янв. Muhammad Suleman atsakymas, pateiktas sausio 20 d 2015-01-20 14:54 '15, 14:54, 2015-01-20 14:54

Nuorodų į objektus masyvo deklaravimas:

 class Animal {} class Horse extends Animal { public static void main(String[] args) {  Animal[] a1 = new Animal[10]; a1[0] = new Animal(); a1[1] = new Horse();  Animal[] a2 = new Horse[10]; a2[0] = new Animal(); a2[1] = new Horse();  Horse[] h1 = new Horse[10]; h1[0] = new Animal(); // Not allowed h1[1] = new Horse();  Horse[] h2 = new Animal[10]; // Not allowed } } 
7
16 окт. atsakymas suteikiamas gydymui 16 okt. 2015-10-16 13:18 '15, 13:18, 2015-10-16 13:18

Masyvas yra eilinis elementų sąrašas.

 int item = value; int [] one_dimensional_array = { value, value, value, .., value }; int [][] two_dimensional_array = { { value, value, value, .. value }, { value, value, value, .. value }, .. .. .. .. { value, value, value, .. value } }; 

Jei tai yra objektas, tai yra ta pati sąvoka.

 Object item = new Object(); Object [] one_dimensional_array = { new Object(), new Object(), .. new Object() }; Object [][] two_dimensional_array = { { new Object(), new Object(), .. new Object() }, { new Object(), new Object(), .. new Object() }, .. .. .. { new Object(), new Object(), .. new Object() } }; 

Esant objektams, jums reikia arba priskirti jį null inicijuoti new Type(..) , pavyzdžiui, String ir Integer yra ypatingi atvejai, kurie bus traktuojami kaip šie

 String [] a = { "hello", "world" }; // is equivalent to String [] a = { new String({'h','e','l','l','o'}), new String({'w','o','r','l','d'}) }; Integer [] b = { 1234, 5678 }; // is equivalent to Integer [] b = { new Integer(1234), new Integer(5678) }; 

Apskritai, galite sukurti matricas, kurios yra M

 int [][]..[] array = // ^ M times [] brackets {{..{ // ^ M times { bracket // this is array[0][0]..[0] // ^ M times [0] }}..} // ^ M times } bracket ; 

Verta pažymėti, kad dydžio matricos M sukūrimas yra brangus pagal erdvę. Kadangi kuriant M matricą su N visais matmenimis, bendras matricos dydis yra didesnis nei N^M , nes kiekvienoje matricoje yra nuoroda, o M-dimensijoje yra (M -1) matmenų nuorodų masyvas. Bendras dydis yra toks

 Space = N^M + N^(M-1) + N^(M-2) + .. + N^0 // ^ ^ array reference // ^ actual data 
6
21 окт. atsakymas pateikiamas Khaled.K 21 spalis. 2015-10-21 16:39 '15, 16:39 pm 2015-10-21 16:39

„Java 8“ galite ją naudoti.

 String[] strs = IntStream.range(0, 15) // 15 is the size .mapToObj(i -> Integer.toString(i)) .toArray(String[]::new); 
5
08 марта '18 в 21:21 2018-03-08 21:21 atsakymą pateikė Chamly Idunil, kovo 8 d. 18, 21:21 2018-03-08 21:21

Norėdami sukurti objektų klasės masyvus, galite naudoti java.util.ArrayList . nustatyti masyvą:

 public ArrayList<ClassName> arrayName; arrayName = new ArrayList<ClassName>(); 

Vertybių priskyrimas masyvui:

 arrayName.add(new ClassName(class parameters go here); 

Skaitymas iš masyvo:

 ClassName variableName = arrayName.get(index); 

Pastaba:

arrayName yra masyvo nuoroda, rodanti, kad manipuliuojantis variableName bus kontroliuojamas arrayName

ciklams:

 //repeats for every value in the array for (ClassName variableName : arrayName){ } //Note that using this for loop prevents you from editing arrayName 

kilpa, leidžianti redaguoti „ arrayName (normalus arrayName ):

 for (int i = 0; i < arrayName.size(); i++){ //manipulate array here } 
5
08 авг. atsakymą pateikė Samuel Newport 08 rug. 2016-08-08 13:01 '16 at 01.01 pm 2016-08-08 13:01

„Java“ 9

Naudojant įvairius IntStream.iterate ir IntStream.takeWhile :

 int[] a = IntStream.iterate(10, x -> x <= 100, x -> x + 10).toArray(); Out: [10, 20, 30, 40, 50, 60, 70, 80, 90, 100] int[] b = IntStream.iterate(0, x -> x + 1).takeWhile(x -> x < 10).toArray(); Out: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 

„Java“ 10

Vietinio įvesties kintamojo tipo naudojimas :

 var letters = new String[]{"A", "B", "C"}; 
4
21 февр. Atsakymas pateikiamas Oleksandrui vasario 21 d. 2018-02-21 15:45 '18, 15:45 pm 2018-02-21 15:45

Pripažinkite ir inicijuokite „Java 8“ ir vėlesnius. Sukurti paprastą sveiką skaičių masyvą:

 int [] a1 = IntStream.range(1, 20).toArray(); System.out.println(Arrays.toString(a1)); // Output: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19] 

Sukurkite atsitiktinę masyvą sveikiems skaičiams tarp [-50, 50] ir dvigubai [0, 1E17]:

 int [] a2 = new Random().ints(15, -50, 50).toArray(); double [] a3 = new Random().doubles(5, 0, 1e17).toArray(); 

Dviejų sekų galia:

 double [] a4 = LongStream.range(0, 7).mapToDouble(i -> Math.pow(2, i)).toArray(); System.out.println(Arrays.toString(a4)); // Output: [1.0, 2.0, 4.0, 8.0, 16.0, 32.0, 64.0] 

Jei naudojate eilutę [], turite nurodyti konstruktorių:

 String [] a5 = Stream.generate(()->"I will not squeak chalk").limit(5).toArray(String[]::new); System.out.println(Arrays.toString(a5)); 

Daugiamatės matricos:

 String [][] a6 = List.of(new String[]{"a", "b", "c"} , new String[]{"d", "e", "f", "g"}) .toArray(new String[0][]); System.out.println(Arrays.deepToString(a6)); // Output: [[a, b, c], [d, e, f, g]] 
3
25 авг. atsakymą pateikė Kirill Podlivaev 25 rug . 2017-08-25 16:27 '17, 16:27 pm 2017-08-25 16:27

Kitas būdas deklaruoti ir inicijuoti „ArrayList“ yra:

 private List<String> list = new ArrayList<String>(){{ add("e1"); add("e2"); }}; 
1
04 авг. atsakymas pateikiamas Clement.Xu 04 rug . 2017-08-04 10:42 '17 at 10:42 2017-08-04 10:42
 int[] SingleDimensionalArray = new int[2] int[][] MultiDimensionalArray = new int[3][4] 
-6
19 нояб. TreyMcGowan lapkričio 19 d 2015-11-19 20:43 '15 ne 20:43 2015-11-19 20:43

Kiti klausimai apie arba užduoti klausimą