CodeGym /Blog Java /Ngẫu nhiên /Làm cách nào để hoán đổi các đối tượng trong Java?

Làm cách nào để hoán đổi các đối tượng trong Java?

Xuất bản trong nhóm
Hoán đổi đối tượng là một trong những hành động phổ biến nhất trong lập trình. Nó đặc biệt hữu ích trong việc phân loại. Điều xảy ra trong hoán đổi là hai biến trao đổi giá trị của chúng. Trong bài viết này, chúng ta tìm hiểu cách hoán đổi đối tượng trong Java trong hai trường hợp khác nhau. Một là hoán đổi các đối tượng độc lập và hai là hoán đổi hai đối tượng trong Danh sách hoặc Mảng. Trước tiên hãy kiểm tra việc hoán đổi các đối tượng độc lập.Làm cách nào để hoán đổi các đối tượng trong Java?  - 1

Hoán đổi đối tượng khác với hoán đổi kiểu dữ liệu nguyên thủy

Một trong những phương pháp phổ biến được sử dụng để hoán đổi các giá trị nguyên thủy là sử dụng biến thời gian. Tuy nhiên, bạn biết Java sử dụng “Truyền theo giá trị” khi truyền tham số cho một phương thức. Do đó, hoán đổi đối tượng sẽ không hoạt động như bạn mong đợi với phương pháp này. Ví dụ sau sẽ cho thấy điều đó.

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;
        }
    }
}
Đầu ra: Làm cách nào để hoán đổi các đối tượng trong Java?  - 2Không có hoán đổi! Khi chúng ta gọi phương thức hoán đổi và truyền các đối tượng, chúng ta truyền một bản sao của đối tượng, với tất cả các giá trị thuộc tính. Đây là lý do tại sao nó được gọi là “Pass by Value”. Phương thức hoán đổi thực sự hoán đổi các đối tượng chỉ tác động đến bản sao của đối tượng ban đầu. Vì vậy, các đối tượng ban đầu được giữ nguyên. Giải pháp cho vấn đề này là sử dụng lớp trình bao bọc để bao bọc hai đối tượng.

Trao đổi các đối tượng với một lớp bao bọc


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;
        }
    }
}
Ở đây, chúng tôi đã sử dụng một lớp bao bọc có thuộc tính của loại đối tượng mà chúng tôi cần trao đổi. Bằng cách sử dụng một phương thức hoán đổi đơn giản, nó hoán đổi nội dung của các đối tượng InnerClass của các đối tượng lớp bao bọc. Để triển khai thêm các đối tượng InnerClass đã hoán đổi, chúng ta có thể sử dụng trình bao bọcObj1.xyz và trình bao bọcObj2.xyz tương ứng. Đầu ra:Làm cách nào để hoán đổi các đối tượng trong Java?  - 3

Phương thức hoán đổi () tích hợp trong Java

Các lớp của Java Collections Framework có một phương thức tích hợp sẵn để hoán đổi các phần tử được gọi là swap() . Java.util là một lớp tiện ích chứa các phương thức tĩnh có thể hoạt động trên các phần tử như Danh sách từ giao diện Bộ sưu tập . Sử dụng phương thức hoán đổi dễ dàng hơn nhiều so với ví dụ mà chúng ta đã thảo luận trước đó. Phương thức hoán đổi() là một phương thức tĩnh và do đó bạn gọi nó với tên lớp là Collections.swap() . Kiểu trả về của phương thức swap() là void nên nó sẽ không trả về gì cả. Bạn cần truyền ba đối số cho phương thức swap() . Kiểm tra ghi chú dưới đây.

swap(List<?> list, int a, int b)
Thông số:
  • danh sách - danh sách chứa các yếu tố chúng tôi trao đổi.
  • a — chỉ mục của phần tử được hoán đổi .
  • b — chỉ mục của một phần tử khác được hoán đổi .
Lưu ý rằng phương thức này sẽ đưa ra một ngoại lệ IndexOutOfBounds nếu a hoặc b nằm ngoài phạm vi của kích thước danh sách. Chỉ mục tối đa của danh sách nhỏ hơn kích thước của danh sách. Bất kỳ giá trị chỉ mục nào nhiều hơn giá trị đó sẽ khiến IndexOutOfBoundsException bị ném. Một ví dụ về cách sử dụng phương thức hoán đổi trên ArrayList được hiển thị bên dưới.

phương thức hoán đổi () trên 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 của trái cây chứa sáu phần tử. Chúng ta hoán đổi phần tử thứ 2 thứ 5 bằng phương thức hàm swap() . Cách tốt nhất là viết phương thức swap() trong khối try-catch vì nó có thể tạo ra một ngoại lệ IndexOutOfBoundsException khi chạy. Kết quả: Nếu chúng ta chuyển '2' và '8' làm chỉ mục, ứng dụng sẽ đưa ra một ngoại lệ vì kích thước của danh sách là sáu. Làm cách nào để hoán đổi các đối tượng trong Java?  - 4

Collections.swap(fruits, 2, 8);
Đầu ra sẽ là:Làm cách nào để hoán đổi các đối tượng trong Java?  - 5

Phần kết luận

Trong hướng dẫn này, chúng ta đã thảo luận về một số kỹ thuật hoán đổi được sử dụng trong Java. Một trong số họ đang sử dụng lớp trình bao bọc và lớp kia đang sử dụng phương thức Collection.swap() . Điều quan trọng cần nhớ là việc xử lý ngoại lệ nên được thực hiện khi sử dụng hàm swap() vì nó đưa ra một ngoại lệ trong thời gian chạy.
Bình luận
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION