交换两个数组的元素首尾交换

方法一:将两个数组的对应元素,一一交换一遍就可以了,但是这两个数组的长度必须是一样长的,否则就没法交换了。
package ChangeTwoArray;

public class ChangeTwoArray {
     public void ChangeTwoArray(int[] a,int[] b){
         //先有两个数组
       //方法一:对位置的元素交换即可
         for(int i=0;i<a.length;i++){
             int temp=a[i];
             a[i]=b[i];
             b[i]=temp;
         }
         //最后输出验证一下
         for(int value:a){
             System.out.print(value+" ");
         }
         System.out.println("\n"+"--------------------------");

         for(int value:b){
             System.out.print(value+" ");
         }
     }

}

package ChangeTwoArray;

public class TestMain {
    public static void main(String[] args){
        int[] a={1,2,3,4,5};
        int[] b={6,7,8,9,10};
        ChangeTwoArray changeTwoArray=new ChangeTwoArray();
        changeTwoArray.ChangeTwoArray(a,b);
    }

}

总之,这里主要是想说一下参数和返回值的问题,还是画个原理图比较清楚吧

用java交换两个数 java交换两个数组元素的值_数组

方法二:我们可以直接交换两个数组的地址,从而达到将两个数组的元素进行交换,这种交换方式突破了数组长度的限制,
package ChangeTwoArray;

public class ChangeTwoArray {
     public int[][]  ChangeTwoArray(int[] a,int[] b){
         //先有两个数组
       //方法一:对位置的元素交换即可
         for(int i=0;i<a.length;i++){
             int[] temp=a;
             a=b; 
             b=temp;
         }

         //接返回值,才能得到交换的结果,否则交换的临时空间消失后,无法达到交换
         int[][] result={a,b};
         return result;


     }

}


package ChangeTwoArray;

public class TestMain {
    public static void main(String[] args){
        int[] a={1,2,3,4,5,59,30,58};
        int[] b={6,7,8,9,10};
        ChangeTwoArray changeTwoArray=new ChangeTwoArray();
        //用一个[][] value二维数组来接返回值
        int [][] value=changeTwoArray.ChangeTwoArray(a,b);
        a=value[0];
        b=value[1];

        //最后输出验证一下
        for(int v:a){
            System.out.print(v+" ");
        }
        System.out.println("\n"+"--------------------------");

        for(int v:b){
            System.out.print(v+" ");
        }
    }

}

用java交换两个数 java交换两个数组元素的值_System_02


方法二中的这里,主要是想强调一下,为什么地址交换完后需要接返回值,不接可以吗?当然不行。因为方法是储存在堆内存的对象空间的,执行时在栈内存的临时空间,方法执行完,没有接返回值,临时空间消失(就相当于红色部分和蓝色部分都消失了),原地址没有改变,,就相当于没有交换过来。