Java中swap()方法的實現

來源:互聯網
上載者:User

又看到了請指標和引用的部分,又會有經典的swap()方法的實現。幾乎所有人都知道了,要實現一個正確的swap()方法需要以指標或引用為參數,例如:

C代碼

  1. //使用指標
      
  2. void swap(int* a, int* b){
      
  3.        
  4.     int tmp = *a;   
  5.     *a = *b;   
  6.     *b = tmp;   
  7.        
  8. }   
  9.   
  10. //使用引用
      
  11. void swap(int& a,int& b){
      
  12.        
  13.     int tmp = a;   
  14.     a = b;   
  15.     b = tmp;   
  16.        
  17. }  

       突然就想到,在Java中需要怎麼實現這個過程呢?Java中沒有所謂的指標和引用的概念,並且Java中所有的傳遞都是值傳遞,也就是說,下面的方法在Java中同樣沒有效:

 

Java代碼
  1. void swap(int a, int b){
      
  2.     int tmp = a;   
  3.     a = b;   
  4.     b = tmp;   
  5. }   

所以這是相當尷尬的事。為了實現一個正確的交換過程,好像必須做一些更複雜的事。

 

如果a,b是類中兩個成員變數,那可以直接寫如下方法:

 

Java代碼
  1. int a = 4;   
  2. int b = 5;   
  3.   
  4. public void swap(){   
  5.     int tmp = a;   
  6.     a = b;   
  7.     b = tmp;   
  8. }  

   
因為Java中所有的方法、變數必須在一個類中聲明,所以此時a,b和swap()在同一個類中,因此不需要傳遞參數,在swap()方法中就直接引用對象的成員變數。

 

      另一個方法就是通過重新賦值的方式進行,例如可以寫一個變數方法:

 

Java代碼
  1. public static int[] swap(int a1, int a2){
      
  2.     int tmp = a1;   
  3.     a1 = a2;   
  4.     a2 = tmp;   
  5.     return new int[]{a1,a2};
      
  6. }   

      根據傳遞進來時的順序,最後再重新取回對應的值,例如:

 

Java代碼
  1. int a = 4;   
  2. int b = 5;   
  3.   
  4. int[] swap = swap(a, b);   
  5. a = swap[0];   
  6. b = swap[1];   
  7. System.out.println(a+"  "+b);   

       看來沒有指標或引用,也是有很大問題,按理,以下方法應該適用於所有的交換:

Java代碼
  1. public static <T> void swap(T t1, T t2){
      
  2.     T tmp = t1;   
  3.     t1 = t2;   
  4.     t2 = tmp;   
  5. }   

      不過,測試過後就會發現,這個方法總是失效的。所以我們總是必須想到其他的方式來實現。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.