diff --git a/core-java-modules/core-java-collections-list-4/src/main/java/com/baeldung/list/reverse/ReverseArrayList.java b/core-java-modules/core-java-collections-list-4/src/main/java/com/baeldung/list/reverse/ReverseArrayList.java new file mode 100644 index 0000000000..a97633b904 --- /dev/null +++ b/core-java-modules/core-java-collections-list-4/src/main/java/com/baeldung/list/reverse/ReverseArrayList.java @@ -0,0 +1,23 @@ +package com.baeldung.list.reverse; + +import java.util.List; + +public class ReverseArrayList { + private ReverseArrayList() { + throw new RuntimeException("This class cannot be instantiated."); + } + + public static void reverseWithRecursion(List list) { + if (list.size() > 1) { + T value = list.remove(0); + reverseWithRecursion(list); + list.add(value); + } + } + + public static void reverseWithLoop(List list) { + for (int i = 0, j = list.size() - 1; i < j; i++) { + list.add(i, list.remove(j)); + } + } +} diff --git a/core-java-modules/core-java-collections-list-4/src/test/java/com/baeldung/list/reverse/ReverseArrayListUnitTest.java b/core-java-modules/core-java-collections-list-4/src/test/java/com/baeldung/list/reverse/ReverseArrayListUnitTest.java new file mode 100644 index 0000000000..bf5bf43d13 --- /dev/null +++ b/core-java-modules/core-java-collections-list-4/src/test/java/com/baeldung/list/reverse/ReverseArrayListUnitTest.java @@ -0,0 +1,46 @@ +package com.baeldung.list.reverse; + +import static org.assertj.core.api.Assertions.assertThat; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.List; + +import org.junit.jupiter.api.Test; + +class ReverseArrayListUnitTest { + + private static final List EXPECTED = new ArrayList<>(Arrays.asList(7, 6, 5, 4, 3, 2, 1)); + + @Test + void givenArrayList_whenCallReverseMethod_thenListReversedInPlace() { + List aList = new ArrayList<>(Arrays.asList(1, 2, 3, 4, 5, 6, 7)); + Collections.reverse(aList); + assertThat(aList).isEqualTo(EXPECTED); + } + + @Test + void givenArrayList_whenCallReverseMethod_thenListReversedAsaNewList() { + List originalList = new ArrayList<>(Arrays.asList(1, 2, 3, 4, 5, 6, 7)); + List aNewList = new ArrayList<>(originalList); + Collections.reverse(aNewList); + + assertThat(aNewList).isNotEqualTo(originalList) + .isEqualTo(EXPECTED); + } + + @Test + void givenArrayList_whenCallReverseWithRecur_thenListReversedInPlace() { + List aList = new ArrayList<>(Arrays.asList(1, 2, 3, 4, 5, 6, 7)); + ReverseArrayList.reverseWithRecursion(aList); + assertThat(aList).isEqualTo(EXPECTED); + } + + @Test + void givenArrayList_whenCallReverseWithLoop_thenListReversedInPlace() { + List aList = new ArrayList<>(Arrays.asList(1, 2, 3, 4, 5, 6, 7)); + ReverseArrayList.reverseWithLoop(aList); + assertThat(aList).isEqualTo(EXPECTED); + } +} \ No newline at end of file