From 4945be2fd6d98c168139937175d0f6f09bdd3407 Mon Sep 17 00:00:00 2001 From: Kai Yuan Date: Wed, 9 Aug 2023 02:05:39 +0200 Subject: [PATCH] What's the Difference Between Iterator and Listiterator? (#14547) --- .../core-java-collections-list-5/pom.xml | 26 ++++- .../IteratorVsListIteratorUnitTest.java | 108 ++++++++++++++++++ ...ContainsElementFromOtherListUnitTest.java} | 4 +- 3 files changed, 134 insertions(+), 4 deletions(-) create mode 100644 core-java-modules/core-java-collections-list-5/src/test/java/com/baeldung/java/iteratorandlistiterator/IteratorVsListIteratorUnitTest.java rename core-java-modules/core-java-collections-list-5/src/test/java/com/baeldung/java/list/{ListContainsElementFromOtherListTest.java => ListContainsElementFromOtherListUnitTest.java} (97%) diff --git a/core-java-modules/core-java-collections-list-5/pom.xml b/core-java-modules/core-java-collections-list-5/pom.xml index 144fd12c45..bcdb6824ed 100644 --- a/core-java-modules/core-java-collections-list-5/pom.xml +++ b/core-java-modules/core-java-collections-list-5/pom.xml @@ -1,7 +1,7 @@ + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 core-java-collections-list-5 core-java-collections-list-5 @@ -42,11 +42,33 @@ 1.18.26 provided + + com.fasterxml.jackson.core + jackson-databind + ${jackson.version} + test + + + com.google.code.gson + gson + ${gson.version} + test + + + org.json + json + ${org.json.version} + test + + 1.21 2.2 3.12.0 + 2.10.1 + 2.15.2 + 20230618 \ No newline at end of file diff --git a/core-java-modules/core-java-collections-list-5/src/test/java/com/baeldung/java/iteratorandlistiterator/IteratorVsListIteratorUnitTest.java b/core-java-modules/core-java-collections-list-5/src/test/java/com/baeldung/java/iteratorandlistiterator/IteratorVsListIteratorUnitTest.java new file mode 100644 index 0000000000..8efe88c24a --- /dev/null +++ b/core-java-modules/core-java-collections-list-5/src/test/java/com/baeldung/java/iteratorandlistiterator/IteratorVsListIteratorUnitTest.java @@ -0,0 +1,108 @@ +package com.baeldung.java.iteratorandlistiterator; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertTrue; + +import java.util.Iterator; +import java.util.List; +import java.util.ListIterator; + +import org.junit.jupiter.api.Test; + +import com.google.common.collect.Lists; + +public class IteratorVsListIteratorUnitTest { + + @Test + void whenUsingIterator_thenWeCanTraverseForwardsAndRemoveElements() { + List inputList = Lists.newArrayList("1", "2", "3", "4", "5"); + Iterator it = inputList.iterator(); + while (it.hasNext()) { + String e = it.next(); + if ("3".equals(e) || "5".equals(e)) { + it.remove(); + } + } + + assertEquals(Lists.newArrayList("1", "2", "4"), inputList); + + } + + @Test + void whenUsingListIteratorAlternatingNextAndPrevious_thenAlwaysGetTheSameElement() { + List inputList = Lists.newArrayList("1", "2", "3", "4", "5"); + ListIterator lit = inputList.listIterator(); // ^ 1 2 3 4 5 + lit.next(); // 1 ^ 2 3 4 5 + lit.next(); // 1 2 ^ 3 4 5 + + for (int i = 1; i <= 100; i++) { + assertEquals("2", lit.previous()); + assertEquals("2", lit.next()); + } + + } + + @Test + void whenUsingListIterator_thenRetrieveElementInForwardAndBackwardDirection() { + List inputList = Lists.newArrayList("1", "2", "3", "4", "5"); + ListIterator lit = inputList.listIterator(); // ^ 1 2 3 4 5 + + assertFalse(lit.hasPrevious()); // lit is at the beginning of the list + assertEquals(-1, lit.previousIndex()); + + assertEquals("1", lit.next()); // after next(): 1 ^ 2 3 4 5 + assertEquals("2", lit.next()); // after next(): 1 2 ^ 3 4 5 + assertEquals("3", lit.next()); // after next(): 1 2 3 ^ 4 5 + + assertTrue(lit.hasPrevious()); + assertEquals(2, lit.previousIndex()); + assertEquals("3", lit.previous()); // after previous(): 1 2 ^ 3 4 5 + + assertTrue(lit.hasPrevious()); + assertEquals(1, lit.previousIndex()); + assertEquals("2", lit.previous()); // after previous(): 1 ^ 2 3 4 5 + + assertTrue(lit.hasPrevious()); + assertEquals(0, lit.previousIndex()); + assertEquals("1", lit.previous()); // after previous(): ^ 1 2 3 4 5 + } + + @Test + void whenUsingSetElement_thenGetExpectedResult() { + List inputList = Lists.newArrayList("1", "2", "3", "4", "5"); + ListIterator lit = inputList.listIterator(1); // ^ 1 2 3 4 5 + lit.next(); // 1 ^ 2 3 4 5 + + assertEquals("3", lit.next()); // 1 2 ^ 3 4 5 + lit.set("X"); + assertEquals(Lists.newArrayList("1", "2", "X", "4", "5"), inputList); + + assertEquals("X", lit.previous()); // 1 2 ^ X 4 5 + + assertEquals("2", lit.previous()); // 1 ^ 2 X 4 5 + lit.set("Y"); + assertEquals(Lists.newArrayList("1", "Y", "X", "4", "5"), inputList); + } + + @Test + void whenUsingAddElement_thenGetExpectedResult() { + List inputList = Lists.newArrayList("1", "2", "3", "4", "5"); + ListIterator lit = inputList.listIterator(); // ^ 1 2 3 4 5 + lit.next(); // 1 ^ 2 3 4 5 + lit.next(); // 1 2 ^ 3 4 5 + lit.next(); // 1 2 3 ^ 4 5 + + lit.add("X"); // 1 2 3 X ^ 4 5 + assertEquals("4", lit.next()); // 1 2 3 X 4 ^ 5 + + lit.previous(); // 1 2 3 X ^ 4 5 + lit.previous(); // 1 2 3 ^ X 4 5 + lit.previous(); // 1 2 ^ 3 X 4 5 + lit.add("Y"); // 1 2 Y ^ 3 X 4 5 + + assertEquals("Y", lit.previous()); + + assertEquals(Lists.newArrayList("1", "2", "Y", "3", "X", "4", "5"), inputList); + } +} \ No newline at end of file diff --git a/core-java-modules/core-java-collections-list-5/src/test/java/com/baeldung/java/list/ListContainsElementFromOtherListTest.java b/core-java-modules/core-java-collections-list-5/src/test/java/com/baeldung/java/list/ListContainsElementFromOtherListUnitTest.java similarity index 97% rename from core-java-modules/core-java-collections-list-5/src/test/java/com/baeldung/java/list/ListContainsElementFromOtherListTest.java rename to core-java-modules/core-java-collections-list-5/src/test/java/com/baeldung/java/list/ListContainsElementFromOtherListUnitTest.java index 4ce7c44282..8d981f2746 100644 --- a/core-java-modules/core-java-collections-list-5/src/test/java/com/baeldung/java/list/ListContainsElementFromOtherListTest.java +++ b/core-java-modules/core-java-collections-list-5/src/test/java/com/baeldung/java/list/ListContainsElementFromOtherListUnitTest.java @@ -13,7 +13,7 @@ import org.junit.Test; import com.baeldung.list.Country; -public class ListContainsElementFromOtherListTest { +public class ListContainsElementFromOtherListUnitTest { final private List listOfLetters = Arrays.asList("a", "b", "c", "d"); final private List listOfLettersWithOverlap = Arrays.asList("d", "e", "f", "g"); @@ -65,4 +65,4 @@ public class ListContainsElementFromOtherListTest { assertTrue(shouldBeTrue); } -} +} \ No newline at end of file