java中swap()的实现

来源:互联网 发布:windows安装mysql服务 编辑:程序博客网 时间:2024/06/10 22:44
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. }  
 

不过,测试过后就会发现,这个方法总是失效的。所以我们总是必须想到其他的方式来实现。

0 0
原创粉丝点击