CodeGym/Java Blog/무작위의/Java에서 객체를 교환하는 방법은 무엇입니까?
John Squirrels
레벨 41
San Francisco

Java에서 객체를 교환하는 방법은 무엇입니까?

무작위의 그룹에 게시되었습니다
회원
개체 교환은 프로그래밍에서 가장 많이 사용되는 작업 중 하나입니다. 특히 정렬에 유용합니다. 스와핑에서 발생하는 것은 값을 교환하는 두 개의 변수입니다. 이 기사에서는 두 가지 경우에 Java에서 객체를 교환하는 방법을 배웁니다 . 하나는 독립적인 객체를 교환하는 것이고 다른 하나는 목록 또는 배열의 두 객체를 교환하는 것입니다. 먼저 독립 개체 교환을 살펴보겠습니다.Java에서 객체를 교환하는 방법은 무엇입니까?  - 1

객체 교환은 기본 데이터 유형 교환과 다릅니다.

기본 값을 교환하는 데 사용하는 일반적인 방법 중 하나는 임시 변수를 사용하는 것입니다. 그러나 Java는 메서드에 매개 변수를 전달할 때 "값으로 전달"을 사용한다는 것을 알고 있습니다. 따라서 개체 교환은 이 방법으로 예상한 대로 작동하지 않습니다. 다음 예제에서 이를 보여줍니다.
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;
        }
    }
}
결과: Java에서 객체를 교환하는 방법은 무엇입니까?  - 2스와핑이 없었습니다! swap 메서드를 호출하고 객체를 전달할 때 모든 속성 값과 함께 객체의 복사본을 전달합니다. 이것이 "가치에 의한 전달"이라고 불리는 이유입니다. 교환 방법은 실제로 원본 객체의 사본에만 영향을 미치는 객체를 교환합니다. 따라서 원본 개체는 변경되지 않은 상태로 유지됩니다. 이에 대한 해결책은 래퍼 클래스를 사용하여 두 개체를 래핑하는 것입니다.

래퍼 클래스로 개체 교환

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;
        }
    }
}
여기서 우리는 교체해야 하는 개체 유형의 속성이 있는 래퍼 클래스를 사용했습니다. 간단한 교체 방법을 사용하여 래퍼 클래스 개체의 InnerClass 개체 내용을 교체합니다. 교체된 InnerClass 개체의 추가 구현을 위해 그에 따라 wrapperObj1.xyz 및 wrapperObj2.xyz를 사용할 수 있습니다. 출력:Java에서 객체를 교환하는 방법은 무엇입니까?  - 삼

Java의 내장 swap() 메서드

Java Collections Framework의 클래스 에는 swap() 이라는 요소를 교환하는 내장 메서드가 있습니다 . java.util은 Collection 인터페이스의 목록과 같은 요소에서 작동할 수 있는 정적 메소드를 포함하는 유틸리티 클래스입니다. 스왑 방법을 사용하는 것은 앞에서 논의한 예보다 훨씬 쉽습니다. swap () 메서드는 정적 메서드이므로 클래스 이름을 Collections.swap() 으로 호출합니다 . swap() 메서드 의 반환 유형은 void이므로 아무 것도 반환하지 않습니다. swap() 메서드 에 세 개의 인수를 전달해야 합니다 . 아래 참고 사항을 확인하십시오.
swap(List<?> list, int a, int b)
매개변수:
  • 목록 — 목록에는 우리가 교환하는 요소가 포함되어 있습니다.
  • a — 교환할 요소 의 인덱스 .
  • b — 교체할 다른 요소 의 인덱스 .
a 또는 b가 목록 크기 범위를 벗어나는 경우 이 메서드는 IndexOutOfBoundsException을 throw합니다. 목록의 최대 색인은 목록 크기보다 하나 작습니다. 그보다 큰 인덱스 값은 IndexOutOfBoundsException을 발생시킵니다. ArrayList에서 스왑 방법을 사용하는 방법의 예는 다음과 같습니다.

ArrayList의 swap() 메서드

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에는 6개의 요소가 있습니다. 함수 swap() 메서드를 사용하여 2 번째 요소 와 5 번째 요소를 교환합니다 . 가장 좋은 방법은 런타임에 IndexOutOfBoundsException이 발생할 수 있으므로 try-catch 블록 내에 swap() 메서드를 작성하는 것입니다. 출력: 인덱스로 '2' 및 '8'을 전달하면 목록의 크기가 6이므로 응용 프로그램에서 예외가 발생합니다. Java에서 객체를 교환하는 방법은 무엇입니까?  - 4
Collections.swap(fruits, 2, 8);
출력은 다음과 같습니다.Java에서 객체를 교환하는 방법은 무엇입니까?  - 5

결론

이 자습서에서는 Java에서 사용되는 몇 가지 교환 기술에 대해 설명했습니다. 그 중 하나는 래퍼 클래스를 사용하고 다른 하나는 Collection.swap() 메서드를 사용하고 있습니다. 런타임 예외를 발생시키므로 swap() 함수를 사용할 때 예외 처리를 수행해야 한다는 점을 기억하는 것이 중요합니다 .
코멘트
  • 인기
  • 신규
  • 이전
코멘트를 남기려면 로그인 해야 합니다
이 페이지에는 아직 코멘트가 없습니다