From 77671ade4b11a5abb8a1651a44a494ce46d351bb Mon Sep 17 00:00:00 2001 From: Harry9656 Date: Tue, 23 Aug 2022 23:22:43 +0200 Subject: [PATCH] JAVA-5683: Difference Between List.of and Arrays.asList (#12564) Co-authored-by: Harpal Singh --- .../core-java-collections-list-4/pom.xml | 19 ++++++- .../list/creation/ArraysAsListUnitTest.java | 56 +++++++++++++++++++ .../list/creation/ListOfUnitTest.java | 51 +++++++++++++++++ core-java-modules/pom.xml | 1 - pom.xml | 2 + 5 files changed, 127 insertions(+), 2 deletions(-) create mode 100644 core-java-modules/core-java-collections-list-4/src/test/java/com/baeldung/list/creation/ArraysAsListUnitTest.java create mode 100644 core-java-modules/core-java-collections-list-4/src/test/java/com/baeldung/list/creation/ListOfUnitTest.java diff --git a/core-java-modules/core-java-collections-list-4/pom.xml b/core-java-modules/core-java-collections-list-4/pom.xml index ef815b790d..ab4ba37568 100644 --- a/core-java-modules/core-java-collections-list-4/pom.xml +++ b/core-java-modules/core-java-collections-list-4/pom.xml @@ -64,6 +64,23 @@ 1.2.0 3.0 3.22.0 + 17 + 17 + + + + + + org.apache.maven.plugins + maven-compiler-plugin + ${maven-compiler-plugin.version} + + ${maven.compiler.source.version} + ${maven.compiler.target.version} + + + + - \ No newline at end of file + diff --git a/core-java-modules/core-java-collections-list-4/src/test/java/com/baeldung/list/creation/ArraysAsListUnitTest.java b/core-java-modules/core-java-collections-list-4/src/test/java/com/baeldung/list/creation/ArraysAsListUnitTest.java new file mode 100644 index 0000000000..732dd6a35a --- /dev/null +++ b/core-java-modules/core-java-collections-list-4/src/test/java/com/baeldung/list/creation/ArraysAsListUnitTest.java @@ -0,0 +1,56 @@ +package com.baeldung.list.creation; + +import org.junit.jupiter.api.Test; + +import java.util.Arrays; +import java.util.List; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.junit.jupiter.api.Assertions.assertThrows; + +class ArraysAsListUnitTest { + + @Test + void givenAnArrayOfIntegersWhenCreatingAListUsingArraysAsListThenItWillHaveTheSameElementsInTheSameOrder() { + Integer[] array = new Integer[]{1, 2, 3, 4}; + List list = Arrays.asList(array); + assertThat(list).containsExactly(1, 2, 3, 4); + } + + @Test + void givenAnListOfIntegersCreatedUsingArraysAsListWhenChangingTheOriginalArrayTheReturnListWillAlsoChange() { + Integer[] array = new Integer[]{1, 2, 3}; + List list = Arrays.asList(array); + array[0] = 1000; + assertThat(list.get(0)).isEqualTo(1000); + } + + @Test + void givenAnListOfIntegersCreatedUsingArraysAsListWhenChangingTheReturnedListTheOriginalArrayWillAlsoChange() { + Integer[] array = new Integer[]{1, 2, 3}; + List list = Arrays.asList(array); + list.set(0, 1000); + assertThat(array[0]).isEqualTo(1000); + } + + @Test + void givenAnArrayOfIntegersCreatedUsingArraysAsListWhenModifyingAnExistingElementThenModifyIt() { + List list = Arrays.asList(1, 2, 3, 4); + list.set(1, 1000); + assertThat(list.get(1)).isEqualTo(1000); + } + + @Test + void givenAnArrayCreatedWithArraysAsListWhenAddingANewElementThenUnsupportedOperationExceptionIsThrown() { + List list = Arrays.asList(1, 2, 3, 4, 5); + assertThrows(UnsupportedOperationException.class, () -> list.add(6)); + } + + @Test + void givenAnArrayCreatedWithArraysAsListWhenRemovingAnExistingElementThenUnsupportedOperationExceptionIsThrown() { + List list = Arrays.asList(1, 2, 3, 4, 5); + assertThrows(UnsupportedOperationException.class, () -> list.remove(1)); + } + + +} diff --git a/core-java-modules/core-java-collections-list-4/src/test/java/com/baeldung/list/creation/ListOfUnitTest.java b/core-java-modules/core-java-collections-list-4/src/test/java/com/baeldung/list/creation/ListOfUnitTest.java new file mode 100644 index 0000000000..5fe65e965f --- /dev/null +++ b/core-java-modules/core-java-collections-list-4/src/test/java/com/baeldung/list/creation/ListOfUnitTest.java @@ -0,0 +1,51 @@ +package com.baeldung.list.creation; + +import org.junit.jupiter.api.Test; + +import java.util.List; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.junit.jupiter.api.Assertions.assertThrows; + +class ListOfUnitTest { + + @Test + void givenAnArrayOfStringWhenCreatingAListUsingItsValuesThenItWillHaveTheSameElementsInTheSameOrder() { + String[] array = new String[]{"one", "two", "three"}; + List list = List.of(array); + assertThat(list).containsExactly("one", "two", "three"); + } + + @Test + void givenAnListOfStringCreatedUsingListOfWhenChangingTheOriginalArrayTheReturnListWontChange() { + String[] array = new String[]{"one", "two", "three"}; + List list = List.of(array); + array[0] = "thousand"; + assertThat(list.get(0)).isEqualTo("one"); + } + + @Test + void givenAnArrayCreatedWithListOfWhenAddingANewElementThenUnsupportedOperationExceptionIsThrown() { + List list = List.of("one", "two", "three"); + assertThrows(UnsupportedOperationException.class, () -> list.add("four")); + } + + @Test + void givenAnArrayCreatedWithListOfWhenRemovingAnExistingElementThenUnsupportedOperationExceptionIsThrown() { + List list = List.of("one", "two", "three"); + assertThrows(UnsupportedOperationException.class, () -> list.remove("two")); + } + + @Test + void givenAnArrayCreatedWithListOfWhenModifyingAnExistingElementThenUnsupportedOperationExceptionIsThrown() { + List list = List.of("one", "two", "three"); + assertThrows(UnsupportedOperationException.class, () -> list.set(1, "four")); + } + + @Test + void givenAnArrayContainingNullElementWhenUsingItToCreateListThenNullPointerExceptionIsThrown() { + assertThrows(NullPointerException.class, () -> List.of("one", null, "two")); + } + + +} diff --git a/core-java-modules/pom.xml b/core-java-modules/pom.xml index 981374a4ef..22a7fdec1e 100644 --- a/core-java-modules/pom.xml +++ b/core-java-modules/pom.xml @@ -37,7 +37,6 @@ core-java-collections-list core-java-collections-list-2 core-java-collections-list-3 - core-java-collections-list-4 core-java-collections-maps core-java-collections-maps-2 core-java-collections-maps-3 diff --git a/pom.xml b/pom.xml index 5cf2a2907d..b8a73ad0a0 100644 --- a/pom.xml +++ b/pom.xml @@ -1161,6 +1161,7 @@ core-java-modules/core-java-collections-set + core-java-modules/core-java-collections-list-4 core-java-modules/core-java-collections-maps-4 core-java-modules/core-java-date-operations-1 core-java-modules/core-java-datetime-conversion @@ -1234,6 +1235,7 @@ core-java-modules/core-java-collections-set + core-java-modules/core-java-collections-list-4 core-java-modules/core-java-collections-maps-4 core-java-modules/core-java-date-operations-1 core-java-modules/core-java-datetime-conversion