Programmering

Array of arrays

Spørgsmål: Hvordan bruger jeg en række arrays?

EN:

Streng s = ny streng ("Hej, verden"); // s er en strengreference, der henviser til et // strengobjekt med værdien "Hej verden." s = ny streng ("Guten Tag, Welt"); // Den samme strengreference s refererer nu // til et andet strengobjekt; det vil sige // en enkelt reference har henvist til to // forskellige objekter (fortløbende). // (Bemærk, at vi nu har et strengobjekt // med værdien "Hej, verden", der ikke har // referencer; derfor er dette objekt berettiget // til at blive indsamlet skrald) Streng t; // t er en strengreference med en nulværdi // (refererer ikke til noget objekt). // Hvis du prøver at bruge t på dette tidspunkt, f.eks. ved // at sige int len ​​= t.length; du får en // NullPointerException (skal kaldes // NullReferenceException). t = s; // Stringreferencen t henviser nu til det samme // objekt, der henvises til af strengreferencen s, // nemlig et strengobjekt med værdien "Guten Tag, Welt". // Så her har vi to // henvisninger til et enkelt objekt (samtidigt). 

Arrays i Java er objekter i sig selv, uanset om de indeholder primitiver (ints, chars, boolsks osv.) eller indeholder andre objekter. Dette betyder, at der henvises til arrays som ethvert andet objekt med tilføjelse af [] aggregering / dereference semantik. Her er et eksempel:

String [] sa; // sa er en null reference // forsøger at få adgang til sa.length forårsager en NullPointerException. sa = ny streng [2]; // sa er ikke længere en null-reference, den henviser til et specifikt // objekt, der er en matrix med to null-strengreferencer. // sa.længde er nu lig med 2 // (sa [0] og sa [1] er de to null strenghenvisninger). sa [0] = "Hej verden"; sa [1] = "Guten Tag, Welt"; // Nu refererer sa til en matrix med to ikke-nul-strenghenvisninger. sa = ny streng [1]; // sa.length er lig med 1 // Den samme reference sa henviser nu til et andet // (og kortere) array. // sa [0] er en null strengreference // forsøger at få adgang til sa [1] forårsager // ArrayIndexOutOfBoundsException. sa [0] = "Hej verden"; // sa [0] er nu ikke-nul. 

Dit spørgsmål om arrays kan besvares ved at overveje det

Streng [] [] saa; saa [0] [0] = "Hjælp"; 

vil forårsage en NullPointerException, fordi saa er en null reference - det vil sige saa refererer ikke til noget objekt. For at tildele en værdi til det første element i det første array, saa skal henvise til en matrix med en længde større end nul, og saa [0] skal henvise til et ikke-streng-array, hvis længde også er større end nul. Så man kunne starte med at sige:

Streng [] [] saa; // saa er en nullhenvisning til en matrix med strengarrays // At prøve saa.length forårsager allerede en NullPointerException, // som at prøve saa [0] gør. saa = ny streng [1] []; // saa henviser nu til en matrix med 1 null reference til en streng []. // saa.længde er lig med 1. // saa [0] er null. saa [0] = ny streng [2]; // saa refererer nu til en matrix med 1 ikke-nul-reference // til en streng [] med længde 2. // saa.længde er stadig lig med 1. // saa [0]. længde er lig med 2 (men saa [0] [0] og // saa [0] [1] er begge nul). saa [0] [0] = "Hej verden"; saa [0] [1] = "Guten Tag, Welt"; // Nu er saa [0] [0] og saa [0] [1] begge ikke-nul. 

Bemærk, at du ikke kan henvise til saa [0] [0] så længe saa [0] er nullull, og du kan ikke lave saa [0] nullull indtil du gør saa nullull. Dybest set er du nødt til at opbygge din række arrays trinvist.

Der er en brugervenlig stenografi til initialisering af matrixreferencer:

String [] [] saa = {{{"Hello, World}, {" Guten Tag, Welt "}}}; // dette skaber et String [] [] -objekt som det oprettede // ovenfor og tildeler saa til henvise til det pågældende objekt. // Det hvide mellemrum er beregnet til at understrege, at det // oprettede objekt er en matrix af en streng [], som // indeholder to strenge. 

Ved hjælp af denne stenografi kunne vores eksempel korrekt skrives som:

Streng [] [] saa = {{{"Hjælp"}}}; 

Dette gør dog saa henvise til en en efter en streng matrix. Bemærk, at syntaksen ovenfor kun fungerer ved initialisering af en matrixreference (initialisering er det specielle tilfælde af tildeling på erklæringstidspunktet). Den mere generelle måde at oprette en ny matrix på og tildele den til en ny eller eksisterende matrixreference ser sådan ud (i tilfælde af en eksisterende reference):

saa = ny streng [] [] {// bemærk den tomme [] [] - compileren beregner // størrelsen ud (tom [] [] er påkrævet). {{"Hej"}, {"Verden"}} // dette er saa [0], // bemærk kommaet, der adskiller saa [0] og saa [1] {{"Guten Tag"}, {"Welt"} } // dette er saa [1]}; // nu saa.length = 2, og saa [0] og saa [1] har også hver længde 2 
Random Walk Computing er den største Java / CORBA konsulentbutik i New York med fokus på løsninger til den finansielle virksomhed. Random Walk-konsulenter er kendt for deres førende Java-ekspertise og offentliggør og taler om Java i nogle af de mest respekterede fora i verden.

Denne historie, "Array of arrays" blev oprindeligt udgivet af JavaWorld.