Как да обърнете масив в Java

1. Общ преглед

В тази бърза статия ще покажем как можем да обърнем масив в Java.

Ще видим няколко различни начина за това с помощта на чисти решения, базирани на Java 8 - някои от тях мутират съществуващ масив, а други създават нов.

След това ще разгледаме две решения, използващи външни библиотеки - едно, използващо Apache Commons Lang, и друго, използващо Google Guava .

2. Определяне на проблема

Основната идея е да се обърне реда на елементите в масива. Така че, ако е даден масивът:

fruits = {"apples", "tomatoes", "bananas", "guavas", "pineapples"}

Бихме искали да получим:

invertedFruits = {"pineapples", "guavas", "bananas", "tomatoes", "apples"}

Нека да видим някои начини, по които можем да го направим.

3. Използване на традиционен за цикъл

Първият начин, за който може да помислим да обърнем масив, е да използваме цикъл 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 list = Arrays.asList(array); Collections.reverse(list); }

В сравнение с предишните примери, това е по-четлив начин за изпълнение на задачата.

6. Използване на Apache Commons Lang

Друга възможност за инвертиране на масив е използването на библиотеката Apache Commons Lang . За да го използваме, първо трябва да включим библиотеката като зависимост:

 org.apache.commons commons-lang3 3.5 

Най-новата версия на Commons Lang може да бъде намерена в Maven Central.

Нека използваме класа ArrayUtils, за да обърнем масива:

public void invertUsingCommonsLang(Object[] array) { ArrayUtils.reverse(array); }

Както виждаме, това решение е съвсем просто.

7. Използване на Google Guava

Още една възможност е да използвате библиотеката на Google Guava . Точно както направихме с Commons Lang , ще включим библиотеката като зависимост:

 com.google.guava guava 22.0 

Най-новата версия може да бъде намерена в Maven Central.

След това можем да използваме обратния метод в класа Списъци на Гуава, за да обърнем масива:

public Object[] invertUsingGuava(Object[] array) { List list = Arrays.asList(array); List reversed = Lists.reverse(list); return reversed.toArray(); }

8. Заключение

В тази статия разгледахме няколко различни начина за обръщане на масив в Java. Показахме няколко решения, използващи само основната Java и две други решения, които използват библиотеки на трети страни - Commons Lang и Guava .

Всички примерни кодове, показани тук, могат да бъдат намерени в GitHub - това е проект на Maven, така че трябва да е лесно да се импортира и да се изпълнява както е.