1. 概述
在这篇简短的文章中,我们将展示如何在Java中反转数组。
我们将看到几种不同的方法来使用基于纯Java 8的解决方案来实现这一点-其中一些会改变现有数组,而另一些则会创建一个新数组。
接下来,我们将研究两种使用外部库的解决方案-一种使用Apache Commons Lang,另一种使用Google Guava。
2. 定义问题
基本思想是颠倒数组中元素的顺序。因此,如果给定数组:
fruits = {"apples", "tomatoes", "bananas", "guavas", "pineapples"}
我们希望得到:
invertedFruits = {"pineapples", "guavas", "bananas", "tomatoes", "apples"}
3. 使用传统的for循环
我们可能会考虑反转数组的第一种方法是使用for循环:
void invertUsingFor(Object[] array) {
for (int i = 0; i < array.length / 2; i++) {
Object temp = array[i];
array[i] = array[array.length - 1 - i];
array[array.length - 1 - i] = temp;
}
}
正如我们所见,代码遍历了数组的一半,交换对称位置的元素。
我们使用了一个临时变量,这样我们就不会在迭代过程中丢失数组当前位置的值。
4. 使用Java 8 Stream API
我们还可以使用Stream API反转数组:
Object[] invertUsingStreams(Object[] array) {
return IntStream.rangeClosed(1, array.length)
.mapToObj(i -> array[array.length - i])
.toArray();
}
这里我们使用IntStream.range方法来生成一个连续的数字流,然后我们按降序将此序列映射到数组索引中。
5. 使用Collections.reverse()
让我们看看如何使用Collections.reverse()方法反转数组:
public void invertUsingCollectionsReverse(Object[] array) {
List<Object> list = Arrays.asList(array);
Collections.reverse(list);
}
与前面的例子相比,这是一种更具可读性的方式。
6. 使用Apache Commons Lang
反转数组的另一种选择是使用Apache Commons Lang库。要使用它,我们必须首先将库作为依赖项包含在内:
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.12.0</version>
</dependency>
最新版本的Commons Lang可以在[Maven Central](https://search.maven.org/classic/#search | ga | 1 | g%3A”org.apache.commons”ANDa%3A”commons-lang3”)找到。 |
让我们使用ArrayUtils类来反转数组:
public void invertUsingCommonsLang(Object[] array) {
ArrayUtils.reverse(array);
}
正如我们所见,这个解决方案非常简单。
7. 使用Google Guava
另一种选择是使用Google Guava库。同样,我们需要将库作为依赖项包含在内:
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>31.0.1-jre</version>
</dependency>
最新版本可以在[Maven Central](https://search.maven.org/classic/#search | gav | 1 | g%3A”com.google.guava”ANDa%3A”guava”)找到。 |
然后,我们可以使用Guava的Lists类中的reverse方法来反转数组:
public Object[] invertUsingGuava(Object[] array) {
List<Object> list = Arrays.asList(array);
List<Object> reversed = Lists.reverse(list);
return reversed.toArray();
}
8. 总结
在本文中,我们研究了几种在Java中反转数组的不同方法。我们展示了一些仅使用核心Java的解决方案和另外两个使用第三方库的解决方案-Commons Lang和Guava。
与往常一样,本教程的完整源代码可在GitHub上获得。
Show Disqus Comments
Post Directory
扫码关注公众号:Taketoday
发送 290992
即可立即永久解锁本站全部文章