diff --git a/primitiveCollections/src/main/java/org/lucares/collections/IntList.java b/primitiveCollections/src/main/java/org/lucares/collections/IntList.java index 33a4096..c052647 100644 --- a/primitiveCollections/src/main/java/org/lucares/collections/IntList.java +++ b/primitiveCollections/src/main/java/org/lucares/collections/IntList.java @@ -616,7 +616,10 @@ public final class IntList implements Serializable, Cloneable { int result = -1; if (sorted) { - final int insertionPoint = Arrays.binarySearch(data, offset, size(), value); + int insertionPoint = Arrays.binarySearch(data, offset, size(), value); + while (insertionPoint > 0 && insertionPoint > offset && data[insertionPoint - 1] == value) { + insertionPoint--; + } result = insertionPoint < 0 ? -1 : insertionPoint; } else { for (int i = offset; i < size; i++) { @@ -867,5 +870,4 @@ public final class IntList implements Serializable, Cloneable { return result; } - } diff --git a/primitiveCollections/src/test/java/org/lucares/collections/IntListTest.java b/primitiveCollections/src/test/java/org/lucares/collections/IntListTest.java index bb107a3..8dcd967 100644 --- a/primitiveCollections/src/test/java/org/lucares/collections/IntListTest.java +++ b/primitiveCollections/src/test/java/org/lucares/collections/IntListTest.java @@ -680,6 +680,13 @@ public class IntListTest { Assert.assertEquals(1, list.indexOf(2)); } + @Test + public void testIndexOfOnSortedListReturnsFirstMatch() { + final IntList list = IntList.of(0, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 4); + Assert.assertEquals(2, list.indexOf(2)); + Assert.assertEquals(4, list.indexOf(2, 4)); + } + @Test public void testIndexOfOnUnsortedList() { final IntList list = IntList.of(2, 0, 1);