HOWTO · Java

Java 中的交換方法

本教程解釋了 java 中的 swap 方法。

本頁內容

swap() 方法用於交換 Java 中兩個元素、字元或物件的位置。這個方法可以應用於一個列表、一個字串或一個物件。在本文中,我們將討論 swap() 方法在的使用。

  1. 交換列表中的兩個元素
  2. 交換字串中的兩個字元
  3. 交換兩個物件

使用 swap 方法交換 Java 列表中的兩個元素

該方法用於在不影響列表中其他元素的情況下,交換定義位置上的兩個特定元素。如果指定的索引之一高於列表的大小,那麼該方法將返回一個 out of bound 異常。swap() 將給出一個包含交換的索引中元素的列表輸出。

語法

public static void swap(List mylist, int m, int n)

該方法使用三個引數作為引數-將應用 swap() 方法的列表和要交換的兩個索引。

程式碼示例:

import java.util.ArrayList;
import java.util.Collections;

public class PerformSwap {
  public static void main(String[] args) {
    ArrayList<String> lettersList = new ArrayList<String>();
    lettersList.add("a");
    lettersList.add("b");
    lettersList.add("c");
    lettersList.add("d");
    lettersList.add("e");
    lettersList.add("f");
    lettersList.add("g");
    System.out.println("Original List: " + lettersList);
    Collections.swap(lettersList, 0, 6);
    System.out.println("\nSwapped List: " + lettersList);
  }
}

輸出:

Original List: [a, b, c, d, e, f, g]

Swapped List: [g, b, c, d, e, f, a]

在上面的例子中,我們將索引 6 上的字母 g 和索引 0 上的字母 a 進行了交換。swap 方法只交換了這兩個字母,而沒有干擾任何其他列表元素。

交換 Java 字串中的兩個字元

字串值的一個主要屬性是它是不可變的,也就是說它不能被改變。為了執行交換操作,我們首先要將 String 物件複製到 StringBuilder 或字元陣列中。這兩種資料型別允許我們對複製的物件進行交換操作。下面,我們將使用 char 陣列和 StringBuilder 執行交換操作,以建立一個新的字串和交換字元。

在 Java 中使用 char 陣列執行字串互換操作

swap 方法有三個引數-我們要執行交換的字串和我們要交換的字元的兩個索引。為了執行字元交換,我們首先建立一個臨時字元儲存物件-tempo。這個臨時物件在我們將第一個字元替換為第二個字元時,將其儲存起來,然後將這個字元傳遞給第二個字元,完成交換過程。

其中涉及三個步驟:

  • 將 String 轉換為 char 陣列物件; 2.
  • 獲取物件的長度
  • 交換 char 陣列的索引

程式碼示例。

public class SwapString {
  static char[] swap(String mystring, int i, int j) {
    char ch[] = mystring.toCharArray();
    char tempo = ch[i];
    ch[i] = ch[j];
    ch[j] = tempo;
    return ch;
  }

  public static void main(String args[]) {
    String theS = "Favourite";

    System.out.println(swap(theS, 5, 2));
    System.out.println(swap(theS, 0, theS.length() - 1));
    System.out.println(theS);
  }
}

輸出:

Farouvite
eavouritF
Favourite

在 Java 中使用 StringBuilder 執行字串交換

程式碼示例。

public class SwapString {
  static String swap(String mystring, int i, int j) {
    StringBuilder mysb = new StringBuilder(mystring);
    mysb.setCharAt(i, mystring.charAt(j));
    mysb.setCharAt(j, mystring.charAt(i));
    return mysb.toString();
  }

  public static void main(String args[]) {
    String theS = "Favorite";

    System.out.println(swap(theS, 5, 2));
    System.out.println(swap(theS, 0, theS.length() - 1));

    // Original String
    System.out.println(theS);
  }
}

輸出:

Faiorvte
eavoritF
Favorite

交換 Java 中的兩個物件

swap 方法也可用於交換兩個物件的屬性。物件交換可以在一個屬性的物件上進行,也可以在多個屬性的物件上進行。

交換具有一個屬性的物件

假設我們有一個名為 House 的類,它有一些屬性,如臥室的數量和浴室的數量。讓我們建立兩個 House 的物件-house1 和 house2。House 只有一個屬性-value。我們的目標是交換 house1 和 house2 的資料。

程式碼示例:

public class SwapObjects {
  public static void swap(House house1, House house2) {
    House temp = house1;
    house1 = house2;
    house2 = temp;
  }

  public static void main(String[] args) {
    House house1 = new House();
    House house2 = new House();

    house1.value = 5;
    house2.value = 2;

    // swap using objects
    swap(house1, house2);
    System.out.println(house1.value + ", " + house2.value);
  }
}
class House {
  public int value;
}

輸出:

5, 2

在 Java 中交換物件有一個以上的屬性

我們使用一個 Wrapper 類來交換兩個有多個屬性的物件的屬性。如果我們在不使用封裝類的情況下進行交換,函式 swap 只會建立一個物件引用的副本。

public class SwapObjects {
  public static void main(String[] args) {
    House house1 = new House(5, 3);
    House house2 = new House(2, 1);

    Wrapper whs1 = new Wrapper(house1);
    Wrapper whs2 = new Wrapper(house2);

    // swap using wrapper of objects
    swap(whs1, whs2);
    whs1.house.print();
    whs2.house.print();
  }

  public static void swap(Wrapper whs1, Wrapper whs2) {
    House temp = whs1.house;
    whs1.house = whs2.house;
    whs2.house = temp;
  }
}
class House {
  int bedroom, bathroom;

  // Constructor
  House(int bedroom, int bathroom) {
    this.bedroom = bedroom;
    this.bathroom = bathroom;
  }

  // Utility method to print object details
  void print() {
    System.out.println("bedrooms = " + bedroom + ", bathrooms = " + bathroom);
  }
}
class Wrapper {
  House house;
  Wrapper(House house) {
    this.house = house;
  }
}

輸出:

bedrooms = 2, bathrooms = 1
bedrooms = 5, bathrooms = 3

即使成員的類不給使用者類訪問權,包裝類也會交換物件。在對物件應用 swap() 方法時,可以根據物件中的屬性數量來選擇使用的方法。