CodeGym /Java-blogg /Tilfeldig /Hvordan bytte objekter i Java?
John Squirrels
Nivå
San Francisco

Hvordan bytte objekter i Java?

Publisert i gruppen
Bytte av objekter er en av de mest populære handlingene innen programmering. Det er spesielt nyttig ved sortering. Det som skjer i bytte er to variabler som utveksler verdiene sine. I denne artikkelen lærer vi hvordan du bytter objekter i Java i to forskjellige tilfeller. Den ene bytter uavhengige objekter og den andre bytter to objekter i en liste eller en matrise. La oss først undersøke bytte av uavhengige objekter.Hvordan bytte objekter i Java?  - 1

Å bytte objekter er forskjellig fra å bytte primitive datatyper

En av de vanlige metodene å bruke for å bytte primitive verdier er å bruke en tidsvariabel. Du vet imidlertid at Java bruker "Pass by Value" når du sender parametere til en metode. Derfor vil ikke bytte av objekter fungere som forventet med denne metoden. Følgende eksempel vil vise det.

public class ObjectSwapper {
    public static void main(String[] args) {
        InnerClass obj1 = new InnerClass(12345);
        InnerClass obj2 = new InnerClass(11111);
        swap(obj1, obj2);
        System.out.println("Obj1 ID value : " + obj1.id + "\n" + "Obj2 ID value :  " + obj2.id);
    }
    static void swap(InnerClass x, InnerClass y) {
        InnerClass temp;
        temp = x;
        x = y;
        y = temp;
    }
    static class InnerClass {
        public int id;
        public InnerClass(int Id) {
            this.id = Id;
        }
    }
}
Utgangen: Hvordan bytte objekter i Java?  - 2Det var ingen bytte! Når vi kaller swap-metoden og sender objektene, sender vi en kopi av objektet, med alle egenskapsverdiene. Dette er grunnen til at det kalles "Pass by Value". Byttemetoden bytter faktisk objektene som bare påvirker kopien av det originale objektet. Så de originale gjenstandene holdes uendret. Løsningen på dette ville være å bruke en wrapper-klasse for å pakke inn de to objektene.

Bytte objekter med en wrapper-klasse


public class ObjectSwapper {
    public static void main(String[] args) {
 
        InnerClass obj1 = new InnerClass(12345);
        InnerClass obj2 = new InnerClass(11111);
        objectWrapper wrapperObj1 = new objectWrapper(obj1);
        objectWrapper wrapperObj2 = new objectWrapper(obj2);
        // Values before swapping
        System.out.println("WrapperObj1 InncerClass ID value : " + wrapperObj1.innerObject.id + "\n" + "WrapperObj2 InncerClass ID value : "
                + wrapperObj2.innerObject.id + "\n");
        
        swap(wrapperObj1, wrapperObj2);
        
        // Values after swapping
        System.out.println("WrapperObj1 InncerClass ID value : " + wrapperObj1.innerObject.id + "\n" + "WrapperObj2 InncerClass ID value : "
                + wrapperObj2.innerObject.id);
    }
 
       static void swap(objectWrapper wrapperObj1, objectWrapper wrapperObj2) {
        InnerClass temp;
        temp = wrapperObj1.innerObject;
        wrapperObj1.innerObject = wrapperObj2.innerObject;
        wrapperObj2.innerObject = temp;
    }
 
    static class InnerClass {
        public int id;
        public InnerClass(int Id) {
            id = Id;
        }
    }
 
    static class objectWrapper {
        InnerClass innerObject;
        public objectWrapper(InnerClass objInnner) {
            this.innerObject = objInnner;
        }
    }
}
Her brukte vi en wrapper-klasse som har en egenskap av typen objekter vi må bytte. Ved å bruke en enkel byttemetode bytter den innholdet i InnerClass-objektene til wrapper-klasseobjektene. For ytterligere implementering av de byttede InnerClass-objektene kan vi bruke wrapperObj1.xyz og wrapperObj2.xyz tilsvarende. Utgangen:Hvordan bytte objekter i Java?  - 3

Den innebygde swap()-metoden i Java

Java Collections Frameworks klasser har en innebygd metode for å bytte elementer kalt swap() . Java.util er en verktøyklasse som inneholder statiske metoder som kan operere på elementer som Lists fra samlingsgrensesnittet. Å bruke byttemetoden er mye enklere enn eksemplet vi diskuterte tidligere. Swap ()- metoden er en statisk metode, og derfor starter du den med klassenavnet som Collections.swap() . Returtypen til swap()- metoden er ugyldig, så den vil ikke returnere noe. Du må sende tre argumenter til swap() -metoden. Sjekk notatet nedenfor.

swap(List<?> list, int a, int b)
Parametere:
  • list — liste inneholder elementene vi bytter.
  • a — indeks for et element som skal byttes .
  • b — indeks for et annet element som skal byttes .
Merk at denne metoden vil kaste et IndexOutOfBoundsException hvis enten a eller b er utenfor rekkevidden til listestørrelsen. Maksimal indeks på listen er én mindre enn størrelsen på listen. Enhver indeksverdi mer enn det vil føre til at IndexOutOfBoundsException blir kastet. Et eksempel på hvordan du bruker byttemetoden på en ArrayList er vist nedenfor.

swap()-metoden på en ArrayList


import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class ArrayListSwapper {
    public static void main(String[] args) {
        try {
            List fruits = new ArrayList();
            fruits.add("Mango");
            fruits.add("Papaya");
            fruits.add("Apple");
            fruits.add("Orange");
            fruits.add("Watermelon");
            fruits.add("Bael");
            System.out.println("Before swapping : " + fruits);
         //using Collection.swap() method
            Collections.swap(fruits, 2, 5);
            System.out.println("After swapping : " + fruits);
        } catch (IndexOutOfBoundsException e) {
            System.out.println("Index Out of Bound Exception thrown : " + e);
        }
    }
}
ArrayList of fruits inneholder seks elementer. Vi bytter 2. og 5. element ved å bruke funksjonen swap() -metoden. Den beste praksisen er å skrive swap()- metoden i en try-catch-blokk da den kan kaste en IndexOutOfBoundsException under kjøring. Utdata: Hvordan bytte objekter i Java?  - 4Hvis vi sender '2' og '8' som indekser, vil applikasjonen gi et unntak da størrelsen på listen er seks.

Collections.swap(fruits, 2, 8);
Utgangen vil være:Hvordan bytte objekter i Java?  - 5

Konklusjon

I denne opplæringen diskuterte vi et par bytteteknikker som brukes i Java. En av dem bruker en wrapper-klasse og den andre bruker metoden Collection.swap() . Det er viktig å huske at unntakshåndtering bør gjøres når du bruker funksjonen swap() da den kaster et kjøretidsunntak.
Kommentarer
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION