From 42188fdc2dccd67c3ada4fe8d23d69ed671ed675 Mon Sep 17 00:00:00 2001 From: Bhaskar Ghosh Dastidar Date: Tue, 12 Sep 2023 06:07:38 +0530 Subject: [PATCH] BAEL-6838-index-of-set-element (#14747) Co-authored-by: Bhaskar --- .../core-java-collections-set-2/pom.xml | 6 ++ .../indexawareset/IndexOfElementsInSet.java | 13 +++ .../indexawareset/InsertionIndexAwareSet.java | 20 ++++ .../IndexOfSetElementsUsingListUnitTest.java | 93 +++++++++++++++++++ 4 files changed, 132 insertions(+) create mode 100644 core-java-modules/core-java-collections-set-2/src/main/java/com/baeldung/indexawareset/IndexOfElementsInSet.java create mode 100644 core-java-modules/core-java-collections-set-2/src/main/java/com/baeldung/indexawareset/InsertionIndexAwareSet.java create mode 100644 core-java-modules/core-java-collections-set-2/src/test/java/com/baeldung/indexawareset/IndexOfSetElementsUsingListUnitTest.java diff --git a/core-java-modules/core-java-collections-set-2/pom.xml b/core-java-modules/core-java-collections-set-2/pom.xml index d1a108f8bb..7274f1861b 100644 --- a/core-java-modules/core-java-collections-set-2/pom.xml +++ b/core-java-modules/core-java-collections-set-2/pom.xml @@ -20,6 +20,12 @@ ${junit-platform.version} test + + org.apache.commons + commons-collections4 + 4.4 + + org.testng testng diff --git a/core-java-modules/core-java-collections-set-2/src/main/java/com/baeldung/indexawareset/IndexOfElementsInSet.java b/core-java-modules/core-java-collections-set-2/src/main/java/com/baeldung/indexawareset/IndexOfElementsInSet.java new file mode 100644 index 0000000000..736c5c91e4 --- /dev/null +++ b/core-java-modules/core-java-collections-set-2/src/main/java/com/baeldung/indexawareset/IndexOfElementsInSet.java @@ -0,0 +1,13 @@ +package com.baeldung.indexawareset; + +import java.util.ArrayList; +import java.util.List; +import java.util.Set; + +public class IndexOfElementsInSet { + public int getIndexOf(Set set, E element) { + List arrayList = new ArrayList<>(); + arrayList.addAll(set); + return arrayList.indexOf(element); + } +} diff --git a/core-java-modules/core-java-collections-set-2/src/main/java/com/baeldung/indexawareset/InsertionIndexAwareSet.java b/core-java-modules/core-java-collections-set-2/src/main/java/com/baeldung/indexawareset/InsertionIndexAwareSet.java new file mode 100644 index 0000000000..de2a739186 --- /dev/null +++ b/core-java-modules/core-java-collections-set-2/src/main/java/com/baeldung/indexawareset/InsertionIndexAwareSet.java @@ -0,0 +1,20 @@ +package com.baeldung.indexawareset; + +import java.util.LinkedHashSet; + +public class InsertionIndexAwareSet extends LinkedHashSet { + public InsertionIndexAwareSet() { + super(); + } + + public int getIndexOf(E element) { + int index = 0; + for (E current : this) { + if (current.equals(element)) { + return index; + } + index++; + } + return -1; + } +} diff --git a/core-java-modules/core-java-collections-set-2/src/test/java/com/baeldung/indexawareset/IndexOfSetElementsUsingListUnitTest.java b/core-java-modules/core-java-collections-set-2/src/test/java/com/baeldung/indexawareset/IndexOfSetElementsUsingListUnitTest.java new file mode 100644 index 0000000000..6382db5aee --- /dev/null +++ b/core-java-modules/core-java-collections-set-2/src/test/java/com/baeldung/indexawareset/IndexOfSetElementsUsingListUnitTest.java @@ -0,0 +1,93 @@ +package com.baeldung.indexawareset; + +import java.util.HashSet; +import java.util.LinkedHashSet; +import java.util.Set; +import java.util.TreeSet; + +import org.apache.commons.collections4.set.ListOrderedSet; +import org.junit.Assert; +import org.junit.Test; + +public class IndexOfSetElementsUsingListUnitTest { + @Test + public void givenHashSet_whenIndexOfElement_thenGivesIndex() { + Set set = new HashSet<>(); + set.add(100); + set.add(20); + set.add(300); + set.add(0); + set.add(-1); + set.add(300); + + IndexOfElementsInSet integerIndexOfElementsInSet = new IndexOfElementsInSet<>(); + int index100 = integerIndexOfElementsInSet.getIndexOf(set, 100); + Assert.assertEquals(index100, integerIndexOfElementsInSet.getIndexOf(set, 100)); + Assert.assertEquals(-1, integerIndexOfElementsInSet.getIndexOf(set, 12)); + } + + @Test + public void givenLinkedHashSet_whenIndexOfElement_thenGivesIndex() { + Set set = new LinkedHashSet<>(); + set.add(100); + set.add(20); + set.add(300); + set.add(0); + set.add(-1); + set.add(300); + + IndexOfElementsInSet integerIndexOfElementsInSet = new IndexOfElementsInSet<>(); + Assert.assertEquals(0, integerIndexOfElementsInSet.getIndexOf(set, 100)); + } + + @Test + public void givenTreeSet_whenIndexOfElement_thenGivesIndex() { + Set set = new TreeSet<>(); + set.add(100); + set.add(20); + set.add(300); + set.add(0); + set.add(-1); + set.add(300); + + IndexOfElementsInSet integerIndexOfElementsInSet = new IndexOfElementsInSet<>(); + Assert.assertEquals(0, integerIndexOfElementsInSet.getIndexOf(set, -1)); + Assert.assertEquals(3, integerIndexOfElementsInSet.getIndexOf(set, 100)); + } + + @Test + public void givenIndexAwareSet_whenIndexOfElement_thenGivesIndex() { + InsertionIndexAwareSet set = new InsertionIndexAwareSet<>(); + set.add(100); + set.add(20); + set.add(300); + Assert.assertEquals(0, set.getIndexOf(100)); + Assert.assertEquals(2, set.getIndexOf(300)); + Assert.assertEquals(-1, set.getIndexOf(0)); + } + + @Test + public void givenIndexAwareSetWithStrings_whenIndexOfElement_thenGivesIndex() { + InsertionIndexAwareSet set = new InsertionIndexAwareSet<>(); + set.add("Go"); + set.add("Java"); + set.add("Scala"); + set.add("Python"); + Assert.assertEquals(0, set.getIndexOf("Go")); + Assert.assertEquals(2, set.getIndexOf("Scala")); + Assert.assertEquals(-1, set.getIndexOf("C++")); + } + + @Test + public void givenListOrderedSet_whenIndexOfElement_thenGivesIndex() { + ListOrderedSet set = new ListOrderedSet<>(); + set.add(12); + set.add(0); + set.add(-1); + set.add(50); + + Assert.assertEquals(0, set.indexOf(12)); + Assert.assertEquals(2, set.indexOf(-1)); + Assert.assertEquals(-1, set.indexOf(100)); + } +}