Java中的swap函式
阿新 • • 發佈:2018-12-20
首先,我們來回顧下C語言中的swap函式設計
傳值://不能從根本上交換兩數
#include <stdio.h>
void swap(int a, int b) {
int temp;
temp = a; a = b; b = temp;
}
傳引用://在C語言中,應該稱地址
#include <stdio.h>
void swap(int &a, int &b) {
int temp;
temp = a; a = b; b = temp;
}
那問題來了,java中沒有指標的說法,對普通變數也沒有引用,那我們要怎麼對普通型別的變數進行引用傳遞呢?
方法一:利用陣列
public static void swap(int[] data, int a, int b) {
int temp;
temp = data[a]; data[a] = data[b]; data[b] = temp;
}
方法二(誤導):通過java中的包裝類Integer進行引用傳遞,結果:失敗,因為java中的包裝類不允許改變資料域,個人理解為:java不會提供包裝類Integer資料地址,即引用,而是提供表面資料
方法三:定義自己的包裝類MyInteger
static class MyInteger {
private int x;
public MyInteger(int x) {
this.x = x;
}
public int getValue(){
return x;
}
public void changeValue(int x) {
this.x = x;
}
}
public static void swap(MyInteger a, MyInteger b) {
int t = a.getValue();
a.changeValue(b.getValue());
b.changeValue(t);
}
方法四:外部內聯,直接利用本類
public class Sort { int a, b; public Sort(int a, int b) { this.a = a; this.b = b; } public void swap() { int temp; temp = a; a = b; b = temp; } }