📜  在Java中反转数组

📅  最后修改于: 2022-05-13 01:54:48.017000             🧑  作者: Mango

在Java中反转数组

给定一个数组,任务是在Java中反转给定的数组。

例子:

Input : 1, 2, 3, 4, 5
Output :5, 4, 3, 2, 1

Input :  10, 20, 30, 40
Output : 40, 30, 20, 10

要了解 Array 的基础知识,请参阅 Array 数据结构。

方法

在Java中有许多方法可以反转数组。这些都是:

  • 使用临时数组
  • 使用交换
  • 使用 Collections.reverse() 方法
  • 使用 StringBuilder.append() 方法

1.使用临时数组

第一种方法如下:

  • 输入数组的大小和数组的元素。
  • 考虑一个函数reverse,它接受参数——数组(比如 arr)和数组的大小(比如 n)。
  • 在函数内部,一个新数组(具有第一个数组的数组大小,arr)被初始化。数组arr[]是从第一个元素开始迭代的,数组arr[]的每个元素从后面依次放入新数组中,即新数组是从最后一个元素开始迭代的。
  • 这样,数组 arr[] 的所有元素都被反向放置在新数组中。
  • 此外,我们可以从头开始遍历新数组并打印数组的元素。
Java
// Basic Java program that reverses an array
  
public class reverseArray {
  
    // function that reverses array and stores it 
    // in another array
    static void reverse(int a[], int n)
    {
        int[] b = new int[n];
        int j = n;
        for (int i = 0; i < n; i++) {
            b[j - 1] = a[i];
            j = j - 1;
        }
  
        // printing the reversed array
        System.out.println("Reversed array is: \n");
        for (int k = 0; k < n; k++) {
            System.out.println(b[k]);
        }
    }
  
    public static void main(String[] args)
    {
        int [] arr = {10, 20, 30, 40, 50};
        reverse(arr, arr.length);
    }
}


Java
// Java Program that reverses array
// in less number of swaps
  
public class arrayReverse {
  
    // function swaps the array's first element with last
    // element, second element with last second element and
    // so on
    static void reverse(int a[], int n)
    {
        int i, k, t;
        for (i = 0; i < n / 2; i++) {
            t = a[i];
            a[i] = a[n - i - 1];
            a[n - i - 1] = t;
        }
  
        // printing the reversed array
        System.out.println("Reversed array is: \n");
        for (k = 0; k < n; k++) {
            System.out.println(a[k]);
        }
    }
  
    public static void main(String[] args)
    {
        int[] arr = { 10, 20, 30, 40, 50 };
        reverse(arr, arr.length);
    }
}


Java
// Reversing an array using Java collections
import java.util.*;
  
public class reversingArray {
  
    // function reverses the elements of the array
    static void reverse(Integer a[])
    {
        Collections.reverse(Arrays.asList(a));
        System.out.println(Arrays.asList(a));
    }
  
    public static void main(String[] args)
    {
        Integer [] arr = {10, 20, 30, 40, 50};
        reverse(arr);
    }
}


Java
// Java Program for Reversing an array using StringBuilder
  
import java.util.Arrays;
  
class GFG {
    public static void main (String[] args) {
      String[] arr = {"Hello", "World"};
      StringBuilder reversed = new StringBuilder();
  
      for (int i = arr.length; i > 0; i--) {
          reversed.append(arr[i - 1]).append(" ");
      };
        
      String[] reversedArray = reversed.toString().split(" ");
        
      System.out.println(Arrays.toString(reversedArray));
    }
}


输出
Reversed array is: 

50
40
30
20
10

2.使用交换

第二种方法使用类似的代码来输入和打印数组。但是,我们不会像上面的方法那样创建一个新数组。相反,我们反转原始数组本身。在这个方法中,我们交换数组的元素。第一个元素与最后一个元素交换。第二个元素与最后一个元素交换,依此类推。
例如,考虑数组 [1, 2, 3, ...., n-2, n-1, n]。我们用 n 交换 1,用 n-1 交换 2,用 n-2 交换 3 等等。

Java

// Java Program that reverses array
// in less number of swaps
  
public class arrayReverse {
  
    // function swaps the array's first element with last
    // element, second element with last second element and
    // so on
    static void reverse(int a[], int n)
    {
        int i, k, t;
        for (i = 0; i < n / 2; i++) {
            t = a[i];
            a[i] = a[n - i - 1];
            a[n - i - 1] = t;
        }
  
        // printing the reversed array
        System.out.println("Reversed array is: \n");
        for (k = 0; k < n; k++) {
            System.out.println(a[k]);
        }
    }
  
    public static void main(String[] args)
    {
        int[] arr = { 10, 20, 30, 40, 50 };
        reverse(arr, arr.length);
    }
}
输出
Reversed array is: 

50
40
30
20
10

3. 使用 Collections.reverse() 方法

第三种方法是使用函数Java.util.Collections.reverse(List list)方法。此方法反转指定列表中的元素。因此,我们首先使用Java.util.Arrays.asList(array)将数组转换为列表,然后将列表反转。

Java

// Reversing an array using Java collections
import java.util.*;
  
public class reversingArray {
  
    // function reverses the elements of the array
    static void reverse(Integer a[])
    {
        Collections.reverse(Arrays.asList(a));
        System.out.println(Arrays.asList(a));
    }
  
    public static void main(String[] args)
    {
        Integer [] arr = {10, 20, 30, 40, 50};
        reverse(arr);
    }
}
输出
[50, 40, 30, 20, 10]

4. 使用 StringBuilder.append() 方法

作为第四种方法,如果您正在使用 String 数组,我们可以使用 StringBuilder 并为每个数组元素附加一个从数组长度递减的 for 循环,将 StringBuilder 转换为字符串,然后拆分回数组。

Java

// Java Program for Reversing an array using StringBuilder
  
import java.util.Arrays;
  
class GFG {
    public static void main (String[] args) {
      String[] arr = {"Hello", "World"};
      StringBuilder reversed = new StringBuilder();
  
      for (int i = arr.length; i > 0; i--) {
          reversed.append(arr[i - 1]).append(" ");
      };
        
      String[] reversedArray = reversed.toString().split(" ");
        
      System.out.println(Arrays.toString(reversedArray));
    }
}
输出
[World, Hello]