Array i Java: Användningsområden och inbyggda metoder


Nyckelord: array, enhanced for-loop, java.util.Arrays

lagra data i en array

Den här artikeln kommer visa ett par olika egenskaper och hur vi kan använda en array för att lagra och behandla vår data. Vi ska se flera olika exempel på vad vi kan använda en array till och visa att det finns flera egenskaper hos en array i Java som gör att de blir väldigt lätta att arbeta med.

Hur använder man en array i Java?

Som vi såg när vi introducerade vad en array är så kan vi använda, läsa av och redigera varje element i array med hjälp av index. Vi skriver helt enkelt arrayens namn följt av index inom hakparentes. Vi tar ett kortare illustrativt exempel och skapar en array som vi döper till arrEx och tilldelar ett par värden.

int [] arrEx = {22, 8, 97, 3};

Vidare, om vi vill använda ett av de element som vi sparade i arrEx och tilldela det till en variabel så skriver vi helt enkelt

int varEx = arrEx[2];

Vilket kommer vara lika med,

Exempel Array Java
Figur 1: Exempel på en array i Java

Vidare, om vi skriver ut det i konsollen:

System.out.println("Värdet på elementet i arrEx på index 2 är: " + varEx); 

Så får vi svaret:

Värdet på elementet i arrEx på index 2 är: 97

Längden av en array

Om vi vill veta hur lång en array så skriver vi enkelt namnet på den array vi arbetar med, följt av .length. Funktionen length anger antalet element som tilldelats, och inte det infogade värdet. Om vi har samma array som tidigare och vill veta hur många element den innehåller, då skriver vi:

int lenArr = arrEx.length; 
Length array java
Figur 2: Length för att ange antal element i en array

Vidare, om vi skriver ut det i konsollen

System.out.println("Längden av arrEx är: " + lenArr) 

Så får vi resultatet

Längden av arrEx är: 4

Notera att längden på array kommer vara ett större än index, eftersom index alltid börjar på 0 och längden beräknas som antal element. Till exempel i arrEx ovan så är sista index 3 och längden 4.

Tilldelning ger ingen kopia, utan en referens till samma array

Att en tilldelning ger en referens till samma array och inte en kopia, vad betyder det egentligen? Jo, när vi tilldelar innehållet från en array till en annan så kommer båda arrayerna peka mot samma element. Om vi har samma arrEx som vi använde tidigare och skriver

int [] arrExTwo = arrEx; 

Så kommer det resultera i att:

Array reference example Java

Figur 3: Tilldelning ger en referens till samma array

Vidare, det betyder att om vi skriver:

arrExTwo[3] = 45; 

Så kommer det värdes även ändras för arrEx eftersom dom pekar mot samma element. Det vill säga, skriver vi:

System.out.println(arrEx[3]); 

Så får vi resultatet

45

Exempel på att använda en array i Java

Vi ska nu gå igenom ett par exempel på hur vi kan arbeta med en array. Exempelvis är några klassiska problem att söka igenom en array eller att summera alla värden i en array.

Exempel 1: Summera värden i en array i Java

Som vi såg när gick igenom enhanced for-loop så kan vi enkelt summera elementen i en array. Vi behöver skapa en variabel för att kunna spara ned alla värden och sedan löpa igenom array:n och summera dem.

int total = 0; 
int[] arrEx = {22 , 8, 97, 3}; 

for (int element : arrEx){
   total = total + element; 
}

// Skriva ut total 
System.out.println("Summan av talen i arrEx = " + total);

Vilket resulterar i

Summan av talen i arrEx = 130

Exempel 2: Söka i en array i Java

Säg att vi vill söka igenom en array, till exempel så letar vi efter positionen för ett visst element för att sedan kunna byta ut det. I det här fallet så kommer vi använda oss av en while-loopdär vi ställer upp villkoret att positionen ska vara innanför vår array (en självklarhet) samt att värdet inte ska vara funnet, när någon av de villkoren inte uppfylls så avbryts while-loopen.

För att se ifall elementet på den positionen i array överensstämmer med det eftersökta värdet så kommer vi använda en if-sats som ifall värdet hittas ändrar boolean variabeln, som vi döper till found, till sant och loopen kommer sluta. Skulle värdet inte överensstämma så kommer positionsvariablen att öka med ett för att kolla nästa position i vår array.

int [] field = {5, 6, 33, 54, 77, 87, 32, 78, 98};

// Det eftersökta värdet 
int searched = 78;

// För att kunna spara ned positionen (index)
int pos = 0;         

boolean found = false; 

while (pos < field.length && !found) {
   if (field[pos] == searched){
       // Vi har hittat värdet 
       found = true;   
   }
   else{ 
       // Öka positionsvariabeln 
       pos++;   
   }
}

// Om vi sedan vill skriva ut positionen 
if (found == true){ 
  System.out.println("Värdet hittades på index: " + pos); 
}

// Eller om vi inte hittade värdet 
else{
  System.out.println("Värdet kunde ej hittas i den genomsökta array");
}

Avslutningsvis, resultatet om vi kör programmet blir:

Värdet hittades på index: 7

Exempel 3: Hitta största och minsta värdet på ett element i en array

I det här exemplet så ska vi söka efter det största och minsta värdet i en array. Vi kommer använda en for-loop som går igenom den array vi arbetar med och sedan använda två variabler som vi kallar largest och smallest där vi för varje element i vår array jämför om det är större, eller mindre, än nuvarande värdet på largest respektive smallest. Vi inleder med att tilldelar värdet som finns i det första elementet i arrEx till både largest och smallest.

int[] arrEx = {22 , 31, 8, 14, 57, 3, 81, 79, 4, 80}; 

// Tilldelar värdet på index 0
int largest  = arrEx[0]; 
int smallest = largest; 

// For-loop för att gå igenom array
for (int i = 0; i < arrEx.length; i++){

    // Om värdet på det elementet är större än largest
    if (arrEx[i] > largest){
        largest = arrEx[i]; 
    }

    // Eller om värdet på det elementet är mindre än smallest
    else if (arrEx [i] < smallest){
        smallest = arrEx[i];
    }
}

// Skrivet ut resultatet
System.out.println("Största värdet i arrEx är: " + largest +
"\nMinsta värdet i arrEx är: " + smallest);

Avslutningsvis, resultatet om vi kör programmet ovan blir:

Största värdet i arrEx är: 81
Minsta värdet i arrEx är: 3

Exempel 4: Skriv ut omvänd ordning för en Array i Java

I det här exemplet ska vi använda en array som innehåller flera olika namn och det vi ska göra är att skriva ut de med omvänd ordning i en tabell som börjar på 1.

String[] names = {"Erik", "Stina", "Tom", 
"Gustav", "Amanda", "Elin", "Rebecca", "Hampus"};

Även här kommer vi använda oss av en for-loop för att gå igenom array.

for (int i = 0; i < names.length; i++){
    System.out.println(i+1 + ". " + names[names.length - 1 - i]);
}

Notera att vi skriver names[names.length – 1 – i] inuti for-loopen. Det beror på att längden på array kommer vara ett större än index, eftersom index alltid börjar på 0 och längden beräknas som antal element. Därav behöver vi minska med ett för att inte hamna utanför vår array när vi loopar igenom den. names[names.length – 1 – i] gör så att vi börjar på sista elementet i arrEx och då i ökar så går vi mot början.

Avslutningsvis, resultatet från programmet ovan blir:

1. Hampus
2. Rebecca
3. Elin
4. Amanda
5. Gustav
6. Tom
7. Stina
8. Erik

Exempel 5: Skapa metoder för att jämföra värden i en array

Låt oss nu ta ett exempel där vi använder metoder för att på liknande sätt som ovan ta ut största, respektive minsta, värdet från en array. Det vi sedan ska göra är att jämföra om det största och minsta värdet tillsammans är större eller mindre än summan av alla de övriga värden.

Vidare, till vår hjälp ska vi skapa två stycken metoder, smallIndex och largIndex, som ska ta en array som inparameter och returnera index för minsta, respektive största, värdet i den arrayen. Vi kommer alltså att jobba med index för elementen och det gör vi för att demonstrera hur det funkar med index i en array.

Först så skapar vi en metod som returnerar index för det minsta värdet i en array

public static int smallIndex (int [] a){

    int smallIndex = 0;
    int smallVal = a[0];

    for(int i = 0; i < a.length; i++){
        if( smallVal > a[i]){
            smallVal = a[i];
            smallIndex = i;
        }
    }
    return smallIndex;
}

Sedan skapar vi en metod som returnerar index för det största värdet i en array

public static int largIndex (int [] a){

    int largIndex = 0;
    int largVal = 0;

    for(int i = 0; i < a.length; i++){
        if( a[i] > largVal){
            largVal = a[i];
            largIndex = i;
        }
    }
    return largIndex;
}

Slutligen så använder vi dom och skapar en for-loop som summera värdena i vår array, utan de värdena på de index som innehåller största och minsta värdet.

public static void main(String args[]) {
    int[] arrEx = {22 , 31, 8, 14, 57, 3, 81, 79, 4, 80};
    int small = smallIndex(arrEx);
    int large = largIndex(arrEx);
    int sum = 0;

    for (int i = 0; i < arrEx.length; i++){
        if (i != small && i != large){
            sum = sum + arrEx[i];
        }
    }

    if (sum > (arrEx[small] + arrEx[large])){
        System.out.println("Totalen utan det minsta och största värdet är: " + sum +
        "\n vilket är STÖRRE än minsta och största värdet tillsammans, som är: " 
        + (arrEx[small] + arrEx[large]));
        }

    else{
        System.out.println("Totalen utan minsta och största värdet är: " + sum +
        "\n vilket är MINDRE än minsta och största värdet tillsammans, som är: " 
        + (arrEx[small] + arrEx[large]));
    }
}

Avslutningsvis, resultatet från programmet ovan blir i det här fallet:

Totalen utan det minsta och största värdet är: 295
vilket är STÖRRE än minsta och största värdet tillsammans, som är: 84

Klassen java.util.Arrays: Inbyggda metoder för att arbeta med en array

Klassen java.util.Arrays innehåller en rad olika metoder för att modifiera och arbeta med en array, så som som att sortera eller att söka i en array. Men innan vi kan använda oss av metoderna nedan behöver vi importera klassen vilket vi enkelt gör genom att ange import java.util.Arrays;

Metoderna i klassen java.util.Arrays är bra att känna till, eller snarare, det är bra att känna till att dom finns. Med det sagt, vi rekommenderar inte att du sitter och pluggar på metoderna, snarare uppmärksamma att det finns inbyggda metoder i Java som du kan använda när du arbetar med en array.

Några av de vanligaste metoderna i java.util.Arrays

Vidare, men låt oss titta på några av de vanligaste metoderna som finns i java.util.Arrays så du får en uppfattning vad dom kan göra. Notera att alla metoderna nedan kan användas för alla primitiva datatyper.

  • Arrays.binarySearch(datatyp [] a, datatyp key)
    Söker efter ett specifikt värde i en array. Returnerar elementets index om det finns, eller -1 om det inte hittas.
  • Arrays.equals(datatyp [] a, datatyp[] b)
    Returnerar true om de två angivna arrrayerna är lika med varandra. Två arrayer anses vara lika med varandara båda innehåller samma antal element och alla motsvarande par av element i de två arreyerna är lika.
  • Arrays.fill(datatyp[] a, datatyp val)
    Tilldelar det angivna värdet, val, till varje element i den angivna matrisen. Notera att datypen för array och variabeln måste självklart överenstämma eftersom vi bara kan lagra datatyper av samma sort i en array.
  • Arrays.sort(datatyp[] a)
    Sorterar den angivna arrayen i en stigande ordning, i enlighet med dess naturliga ordning.
  • Arrays.toString(datatyp [] a)
    Returnerar innehållet i den angivna matrisen som en textsträng, alltså en String.

Avslutningsvis, vill du läsa mer om klassen java.util.Arrays och se en utförligare lista och exempel på hur den används kan du göra det på Oracles sida genom att klicka här.

Vanligt misstag när man använder en array i Java

Möjligtvis det vanligaste misstaget när man använder en array är försöka komma åt ett element som inte existerar. Låt oss ta ett enkelt exempel så kommer det vara enklare att förstå vad vi menar. Vi skapar en array, kallat field, och tänker sedan spara ned ett värde i field.

int [] field = new int [10]; 
int[10] = 5;

Detta ger felmedelandet java.lang.ArrayIndexOutOfBoundsException, för field har 10 element, med index räckvidd från 0 till 9. Som vi såg tidigare när vi gick igenom hur man beräknar längden av en array så kommer längden på array att vara ett större än index.

Sammanfattning av egenskaper för array i Java

Vi kan använda en array för att lagra och behandla data. Vi kan använda, läsa av och redigera varje element i array med hjälp av index, då skriver vi helt enkelt arrayens namn följt av index inom hakparentes. Förutom att använda loopar, vanligtvis for-loopen, för att arbeta med en array så finns även inbyggda metoder i klassen java.util.Arrays.

Vanliga frågor och svar: Array i Java

Hur får man reda på hur lång en array är?

Det gör man enkelt genom att använda den inbyggda metoden length. Den använder du genom att skriva metodens namn följt av punkt length.

Måste jag använda en for-loop för att gå igenom en array?

Nej, det går minst lika bra att använda en while-loop eller en do-loop. Däremot kan möjligtvis en for-loop vara att föredra då det är en räkneloop och en array är en förbestämd samling av data som loopen ska gå igenom.

Vad betyder felmeddelandet java.lang.ArrayIndexOutOfBoundsException ?

Det betyder att ditt program försökt nå ett element som ligger utanför den array som du arbetar med. Till exempel, om en array har 10 element så kommer index vara från 0 till 9. När man beräknar längden av en array så kommer längden på array att vara ett större än index. Längden på array kommer vara ett större än index, eftersom index alltid börjar på 0 och längden beräknas som antal element.

Vad tyckte du om sidan?

Lämna gärna feedback och hjälp oss göra sidan bättre

Feedback gör oss bättre!

Lämna gärna feedback om vad du tyckte om avsnittet!