最近收到很多同学留言说在面试中被问到数组反转的问题,应该如何去实现?当然有多种方法可以解决此问题,今天主要给大家讲下Java中使用数组的3种常见方法。此方法适用于所有类型的数组,例如字符串数组或整数数组,甚至适用于对象数组,因为它不关注数据类型。
1、直接反转数组
这是在Java中反转数组的最简单方法之一。此算法遍历数组并交换元素,直到达到中点为止。这也称为直接反转数组,因为不使用任何额外的缓冲区。
for(int i=0; i<array.length/2; i++)
{ int temp = array[i];
array[i] = array[array.length -i -1];
array[array.length -i -1] = temp;
}
该算法的时间复杂度为O(n / 2),即O(N),因为我们仅在数组上迭代直到中点,这种方法是大家在面试时的经常想到的解决方案。
2、使用Java中的ArrayList反转数组
这是在Java中反转数组的另一种简单方法,首先将数组转换为List,然后使用 Collections.reverse()方法反转ArrayList。此方法获取一个List并以线性时间反转元素,您可以使用此方法反转int,String 或任何类型的数组。
让我们看一个示例:
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
/**
* @Aythor 伯乐 VX:bolelaoshi001
* @Date 2021-05-21
*/
public class ArrayReverseDemo {
public static void main(String args[]) {
String[] typesOfInsurance = {"Apple", "Balana", "Orange"};
System.out.println("array before reverse: " + Arrays.toString(typesOfInsurance));
List<String> listOfProducts = Arrays.asList(typesOfInsurance);
Collections.reverse(listOfProducts);
String[] reversed = listOfProducts.toArray(typesOfInsurance);
System.out.println("array after reverse: " + Arrays.toString(reversed));
}
}
输出结果:
array before reverse: [Apple, Balana, Orange]
array after reverse: [Orange, Balana, Apple]
3、通过使用ArrayUtils.reverse()
Apache Commons是一个开放源代码库,提供了一些非常实用程序库,这些实用程序库对于用Java开发非常重要。Apache commons-lang提供了一个ArrayUtils类,该类具有重载的reverse()方法以反转Java中的int,float 或object数组。另外这个方法直接是反转数组没有返回值。
/**
* @Author bole VX:bolelaoshi001
* @Date 2021-5-21
*/
public class ArrayReverseDemo {
public static void main(String[] args) {
String[] assetClasses = {"bond", "equity", "gold", "real estate"};
System.out.println("Array before reversing: " + Arrays.toString(assetClasses));
ArrayUtils.reverse(assetClasses);
System.out.println("Array after reversing: " + Arrays.toString(assetClasses));
}
}
输出结果:
before reversing: [bond, equity, gold, real estate]
Array after reversing: [real estate, gold, equity, bond]
这种方法会用到Apache commons-lang ,所以需要在POM文件里面添加依赖
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.4</version>
</dependency>
结论
今天给大家介绍反转数组的3种方法,分别是直接反转,转成ArrayList后再反转,以及使用Apache Commons工具类反转,如果你下次在面试中遇到这个问题,就可以用以上3种方法来实现。你学会了吗?