1.Arrays.fill()
Når du arbejder med arrays, har Java-programmører meget ofte brug for at fylde arrayet med den samme værdi. Du kan selvfølgelig skrive en løkke og blot tildele en værdi til hver celle i arrayet i løkken:
int[] x = new int[100];
for (int i = 0; i < x.length; i++)
x[i] = 999;
Eller du kan blot kalde Arrays.fill()
metoden, som gør nøjagtig det samme: den fylder det beståede array med den beståede værdi. Sådan ser det ud:
Arrays.fill(name, value)
Og koden i eksemplet ovenfor kan gøres en lille smule mere kompakt og tydeligere:
int[] x = new int[100];
Arrays.fill(x, 999);
Du kan også bruge Arrays.fill()
metoden til ikke at fylde hele arrayet, men en del af det med en vis værdi:
Arrays.fill(name, first, last, value)
Hvor første og sidste er indekserne for den første og sidste celle, der skal udfyldes.
Eksempel:
|
Vi udfylder cellerne x[3] , x[4] , x[5] og x[6] med værdien 999 . Celler i en matrix er nummereret fra nul! Variablen str indeholder værdien:
|
Metoden Arrays.fill()
fungerer kun med endimensionelle arrays. Hvis du videregiver et todimensionelt array til metoden, vil det blive behandlet som endimensionelt med alle de deraf følgende konsekvenser.
2.Arrays.copyOf()
Som du allerede ved, kan du ikke ændre størrelsen på et array, efter at det er blevet oprettet.
Men hvad hvis du virkelig vil?
Nå, hvis du virkelig vil, så kan du!
- Opret et nyt array med den ønskede længde
- Kopier alle elementerne fra det første array ind i det.
Det er i øvrigt præcis, hvad metoden Arrays.copyOf()
gør. Sådan ser kald det ud:
Type[] name2 = Arrays.copyOf(name, length);
Denne metode ændrer ikke det eksisterende array , men opretter i stedet et nyt array og kopierer elementerne fra det gamle array ind i det.
Hvis elementerne ikke passer (længden er mindre end længden af det eksisterende array ), ignoreres de ekstra værdier.
Hvis længden af den nye matrix er større end længden af den gamle, udfyldes cellerne med nuller.
Eksempel:
|
Variablen str2 indeholder værdien:
Variablen str3 indeholder værdien:
|
3.Arrays.copyOfRange()
Og hvad hvis du vil have en matrix med længde 5 fra en matrix med længde 10, men du har brug for, at den indeholder de sidste 5 elementer i stedet for de første 5?
I dette tilfælde vil en anden metode i Arrays
klassen være nyttig - Arrays.copyOfRange()
. Sådan ser det ud, når vi kalder det:
Type[] name2 = Arrays.copyOfRange(name, first, last);
Denne metode opretter også et nyt array, men fylder det med elementer fra et vilkårligt sted i det originale array. Hvor første og sidste er indekserne for de første og sidste elementer, der skal sættes ind i det nye array.
Eksempel:
|
Variablen str2 indeholder værdien:
Variablen str3 indeholder værdien:
|
4.Arrays.sort()
Ah, den lækreste godbid: sortering . Arrays sorteres ret ofte i programmering. De tre mest almindelige handlinger, når du arbejder med arrays er:
- Sortering af et array
- At finde minimum (eller maksimum) element i en matrix
- Bestemmelse af indekset for et element i en matrix (finde et element i en matrix)
Det er netop derfor, Javas skabere inkluderede sort()
metoden i Arrays
klassen. Sådan ser kald det ud:
Arrays.sort(name);
Denne metode sorterer det beståede array i stigende rækkefølge.
Eksempel:
|
Variablen str indeholder værdien:
|
Fremragende, ikke? Du kaldte én metode, og nu har du et sorteret array. Smuk.
Forresten kan du bruge denne metode til at sortere ikke kun hele arrayet, men kun en del af det. Sådan ser kald det ud:
Arrays.sort(name, first, last);
Hvor første og sidste er indekserne for den første og sidste celle, som sorteringen skal røre ved.
Eksempel:
|
Variablen str indeholder værdien:
|
For at sortere arrays bruger Java den hurtigste sorteringsalgoritme — QuickSort . Dens beregningsmæssige kompleksitet afhænger af arrayets størrelse og beregnes ved hjælp af formlen N log(N).
Sortering af et array på 1000 elementer vil involvere omkring 3.000 sammenligninger af array-elementer. Sortering af en række af en million elementer vil involvere omkring 6 millioner sammenligninger.
5.Arrays.binarySearch()
Nå, og den sidste af de mest interessante metoder i klassen Arrays
er i stand til at søge efter en given værdi i et array. Dette er ingen almindelig søgning - det er den elskede binære søgning . Det bunder i dette:
- Først sorteres arrayet.
- Derefter sammenlignes det midterste element i arrayet med det, vi leder efter.
- Hvis elementet er større end det midterste element, så fortsætter søgningen i højre halvdel af arrayet.
- Hvis det element, vi leder efter, er mindre end det midterste element, så fortsætter søgningen i venstre halvdel af arrayet.
Fordi arrayet er sorteret, er det muligt at eliminere halvdelen af det i en enkelt sammenligning. Så i næste trin smider vi en anden halvdel ud, og så videre.
Denne tilgang gør binær søgning meget hurtig. I en række af en million (!) elementer kan den finde indekset for det ønskede element i kun 20 sammenligninger. Tilgangens mangel er, at arrayet først skal sorteres, og sorteringen tager også tid.
Sådan ser kald det ud:
int index = Arrays.binarySearch(name, value);
Hvor name
er navnet på arrayet, som skal bestå allerede sorteret (for eksempel ved hjælp af metoden Arrays.sort()
). Og value
er det element, vi leder efter i arrayet. Resultatet, der returneres af metoden, er indekset for det ønskede array-element .
Eksempler:
|
x er:
4 1 (indekser 0 og 2 er også acceptable)8 -7 |
Hvis arrayet indeholder flere forekomster af det element, der søges efter, vil algoritmen blot returnere indekset for en af dem (der er ingen garanti for, at det f.eks. vil være den allerførste eller omvendt - den allersidste af disse duplikerede elementer)."
Hvis elementet ikke findes i arrayet, vil indekset være negativt.
6. Link til Oracle-dokumentation på Arrays
klassen
Hvis du er super interesseret, kan du læse alt om Arrays
klassen og alle dens metoder i den officielle dokumentation a href="https://docs.oracle.com/en/java/javase/14/docs/api/java.base /java/util/Arrays.html">på Oracle-webstedet.
Du kan for eksempel læse om Arrays.mismatch()
og Arrays.compare()
metoderne. Måske vil du finde dem nyttige på en eller anden måde.
Og lad dig ikke forvirre af antallet af metoder. Hver metode har 5-10 varianter, som kun adskiller sig i deres parametertyper.
GO TO FULL VERSION