天天看點

java 反轉數組java 反轉數組

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方式的三種實作,以及兩種第三方庫方式實作。