Swap in JAVA, 不是想象中的簡單

來源:互聯網
上載者:User

個程式員都知道,在C/C++裡面交換值的方法:

void swap(int&a ,int&b)<br />{<br /> int temp;<br /> temp = a;<br /> a = b;<br /> b = temp;<br />}<br />

但在JAVA中用這種方法是行不通的,因為“Java對普通類型的變數是不支援引用傳遞的”。

怎麼辦呢?

 

1. 可以像下面這樣通過傳數組(也屬於傳值)的方法來完成對換(在很多排序演算法裡面就是這麼乾的):

public static void swap(int[] data, int a, int b) {<br /> int t = data[a];<br /> data[a] = data[b];<br /> data[b] = t;<br /> }<br />

 

2. 也可以通過重新定義個類(在JAVA中我們可以通過使用int的封裝類---Integer,然後將其作為值的引用傳到函數中,但這個Integer封裝類也不允許你來改變它的資料域;但這不防礙我們用自己的封裝類,比如說下面實現的MyInteger):

//MyInteger: 與Integer有些類似,但是其對象可以變值<br />class MyInteger {<br />private int x; // 將x作為唯一的資料成員<br />public MyInteger(int xIn) { x = xIn; } // 構造器<br />public int getValue() { return x; } // 得到值<br />public void insertValue(int xIn) { x = xIn;} // 改變值<br />}</p><p>public class Swapping {<br />// swap: 傳對象引用<br />static void swap(MyInteger rWrap, MyInteger sWrap) {<br />// 變值過程<br />int t = rWrap.getValue();<br />rWrap.insertValue(sWrap.getValue());<br />sWrap.insertValue(t);<br />}<br />public static void main(String[] args) {<br />int a = 23, b = 47;<br />System.out.println("Before. a:" + a + ", b: " + b);<br />MyInteger aWrap = new MyInteger(a);<br />MyInteger bWrap = new MyInteger(b);<br />swap(aWrap, bWrap);<br />a = aWrap.getValue();<br />b = bWrap.getValue();<br />System.out.println("After. a:" + a + ", b: " + b);<br />}<br />}

 

3. 由於java 中的參數傳遞都是採用的值傳遞方式,這不防礙我們用swap的時候採用外部內聯的方式:

public class Swap2 {<br />public static void main(String args[]){<br />Swap2 sw = new Swap2(1,2);<br />System.out.println("i is" + sw.i);<br />System.out.println("j is" + sw.j);<br />sw.swap();<br />System.out.println("i is" + sw.i);<br />System.out.println("j is" + sw.j);<br />}<br />int i,j;<br />public Swap2(int i, int j){<br />this.i = i;<br />this.j = j;<br />} </p><p>public void swap(){<br />int temp;<br />temp = i;<br />i = j;<br />j = temp;<br />}<br />} </p><p>public class Swap1 {<br />public static void Swap1(Integer a, Integer b){<br />Integer temp = a;<br />a = b;<br />b = temp;<br />}<br />public static void main(String args[]){<br />Integer a,b;<br />a = new Integer(10);<br />b = new Integer(20);<br />Swap1.Swap1(a, b);<br />System.out.println("a is " + a);<br />System.out.println("b is " + b);<br />}<br />}<br />

 

普及知識:

Java是傳值還是傳引用:http://www.bccn.net/Article/kfyy/java/jszl/200601/3069.html

在C/C++/JAVA中實現swap:http://www.cs.utsa.edu/~wagner/CS2213/swap/swap.html

 

 

 

參考:

http://wzdoxu.iteye.com/blog/251988

http://hi.baidu.com/aleczhou/blog/item/975ad262391313d9e7113aa0.html

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.