From 3dd195574954a3effd750cd07f460ceb1823bc0b Mon Sep 17 00:00:00 2001 From: Andreas Huber Date: Sat, 9 Dec 2017 15:50:55 +0100 Subject: [PATCH] indexOf on sorted lists should return the first match --- .../src/main/java/org/lucares/collections/IntList.java | 6 ++++-- .../src/test/java/org/lucares/collections/IntListTest.java | 7 +++++++ 2 files changed, 11 insertions(+), 2 deletions(-) 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);