java 反轉數組
本文我們看看在java中如何反轉數組。有多種方式可以實作,純java8方式——原數組不變并建立新的數組。
然後,我們看看利用第三方庫實作——Apache Commons Lang及Guava。
提出問題
需求是反轉數組元素的順序,是以如果給定數組:
我們希望得到:
下面看集中實作方式.
使用傳統的循環實作
第一種方式,你可能想到循環方式:
void invertUsingFor(Object[] array) {
for (int i = ; i < array.length / ; i++) {
Object temp = array[i];
array[i] = array[array.length - - i];
array[array.length - - i] = temp;
}
}
上面代碼中,疊代數組的一半,改變對稱位置的元素。
我們使用了臨時變量,確定在疊代過程中不丢失目前位置的值。
使用java 8 Stream API
我們也可以使用Stream API實作:
Object[] invertUsingStreams(Object[] array) {
return IntStream.rangeClosed(, array.length)
.mapToObj(i -> array[array.length - i])
.toArray();
}
這裡我們使用IntStream.range方法生成連續的數字流,然後我們按照倒叙方式映射這個序列至數組索引。
使用Collections.reverse()方法
使用Collections.reverse()方法可以很簡單實作。
public void invertUsingCollectionsReverse(Object[] array) {
List<Object> list = Arrays.asList(array);
Collections.reverse(list);
}
與前面方法相比,這種方式可讀性最好。
使用Apache Commons Lang
使用Apache Commons Lang也可以輕松實作:
public void invertUsingCommonsLang(Object[] array) {
ArrayUtils.reverse(array);
}
這種方法相當簡單。對應依賴為,讀者可以自己确定相應版本:
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.5</version>
</dependency>
使用Google Guava
還可以使用Google Guava,對應依賴為,确認相應版本。
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>22.0</version>
</dependency>
利用Lists類的reverse可實作:
public Object[] invertUsingGuava(Object[] array) {
List<Object> list = Arrays.asList(array);
List<Object> reversed = Lists.reverse(list);
return reversed.toArray();
}
總結
本文我們看了幾種不同的方式實作反轉數組。包括純java方式的三種實作,以及兩種第三方庫方式實作。