Udvidelse af en matrixlængde

1. Oversigt

I denne vejledning ser vi på de forskellige måder, hvorpå vi kan udvide et Java-array.

Da arrays er en sammenhængende hukommelsesblok, er svaret muligvis ikke umiddelbart tydeligt, men lad os pakke det ud nu.

2. Brug Arrays.copyOf

Lad os først se på Arrays.copyOf. Vi kopierer arrayet og tilføjer et nyt element til kopien:

public Integer [] addElementUsingArraysCopyOf (Integer [] srcArray, int elementToAdd) {Integer [] destArray = Arrays.copyOf (srcArray, srcArray.length + 1); destArray [destArray.length - 1] = elementToAdd; returnere destArray; }

Vejen Arrays.copyOf værker er, at det tager srcArray og kopierer antallet af elementer, der er angivet i længdeargumentet, til et nyt array som det internt opretter. Størrelsen på det nye array er det argument, vi leverer.

En ting at bemærke er, at når længdeargumentet er større end kildearrayets størrelse, Arrays.copyOf udfylder de ekstra elementer i destinationsarrayet med nul.

Afhængig af datatypen vil udfyldningen være anderledes. For eksempel, hvis vi bruger primitive datatyper i stedet for Heltal derefter fyldes de ekstra elementer med nuller. I tilfælde af char, Arrays.copyOf vil udfylde ekstra elementer med nul og i tilfælde af boolsk, med falsk.

3. Brug ArrayList

Den næste måde, vi ser på, er at bruge ArrayList.

Vi skal først konvertere array til en ArrayListog tilføj derefter elementet. Så vil vi konvertere ArrayList tilbage til en matrix:

public Integer [] addElementUsingArrayList (Integer [] srcArray, int elementToAdd) {Integer [] destArray = new Integer [srcArray.length + 1]; ArrayList arrayList = ny ArrayList (Arrays.asList (srcArray)); arrayList.add (elementToAdd); returnere arrayList.toArray (destArray); }

Bemærk, at vi har bestået srcArray ved at konvertere det til en Kollektion. Det srcArray vilje udfyld den underliggende matrix i ArrayList.

En anden ting at bemærke er også, at vi har bestået destinationsarrayet som et argument til toArray. Denne metode vil kopier det underliggende array til destArray.

4. Brug System.arraycopy

Endelig skal vi se på System.arraycopy, som meget ligner Arrays.copyOf:

public Integer [] addElementUsingSystemArrayCopy (Integer [] srcArray, int elementToAdd) {Integer [] destArray = new Integer [srcArray.length + 1]; System.arraycopy (srcArray, 0, destArray, 0, srcArray.length); destArray [destArray.length - 1] = elementToAdd; returnere destArray; }

En interessant kendsgerning er, at Arrays.copyOf bruger denne metode internt.

Her kan vi bemærke, at vi kopier elementerne fra srcArray til destArray og så tilføj det nye element til destArray.

5. Ydeevne

En ting, der er almindelig i alle løsninger, er, at vi er nødt til at skabe en ny matrix på en eller anden måde. Årsagen til det ligger i, hvordan arrays allokeres i hukommelsen. En matrix indeholder en sammenhængende blok af hukommelse til superhurtig opslag, hvorfor vi ikke bare kan ændre størrelsen på den.

Dette har selvfølgelig en præstationspåvirkning, især for store arrays. Det er derfor ArrayList overfordeler, hvilket effektivt reducerer antallet af gange, som JVM har brug for for at omfordele hukommelsen.

Men hvis vi laver mange indsatser, er en matrix muligvis ikke den rigtige datastruktur, og vi bør overveje a LinkedList.

6. Konklusion

I denne artikel har vi undersøgt de forskellige måder at tilføje elementer til slutningen af ​​en matrix.

Og som altid er hele koden tilgængelig på GitHub.


$config[zx-auto] not found$config[zx-overlay] not found