use 'sorted' flag in indexOf

This commit is contained in:
2017-12-03 09:04:17 +01:00
parent c7cacf1ad4
commit 477820050b
2 changed files with 35 additions and 6 deletions

View File

@@ -566,12 +566,20 @@ public final class IntList implements Serializable, Cloneable {
* if offset is negative, or larger than the size of the list * if offset is negative, or larger than the size of the list
*/ */
public int indexOf(final int value, final int offset) { public int indexOf(final int value, final int offset) {
for (int i = offset; i < index; i++) {
if (data[i] == value) { int result = -1;
return i; if (sorted) {
final int insertionPoint = Arrays.binarySearch(data, offset, size(), value);
result = insertionPoint < 0 ? -1 : insertionPoint;
} else {
for (int i = offset; i < index; i++) {
if (data[i] == value) {
result = i;
break;
}
} }
} }
return -1; return result;
} }
@Override @Override

View File

@@ -604,7 +604,7 @@ public class IntListTest {
} }
@Test @Test
public void testIndexOf() { public void testIndexOfOnSortedList() {
final IntList list = new IntList(); final IntList list = new IntList();
Assert.assertEquals(-1, list.indexOf(0)); Assert.assertEquals(-1, list.indexOf(0));
@@ -619,7 +619,28 @@ public class IntListTest {
} }
@Test @Test
public void testIndexOfWithOffset() { public void testIndexOfOnUnsortedList() {
final IntList list = IntList.of(2, 0, 1);
Assert.assertEquals(1, list.indexOf(0));
Assert.assertEquals(0, list.indexOf(2));
Assert.assertEquals(2, list.indexOf(1));
Assert.assertEquals(-1, list.indexOf(3));
}
@Test
public void testIndexOfWithOffsetOnSortedList() {
final IntList list = new IntList();
list.addAll(1, 1, 2, 3, 3);
Assert.assertEquals(0, list.indexOf(1, 0));
Assert.assertEquals(1, list.indexOf(1, 1));
Assert.assertEquals(2, list.indexOf(2, 2));
Assert.assertEquals(-1, list.indexOf(2, 3));
Assert.assertEquals(3, list.indexOf(3, 2));
}
@Test
public void testIndexOfWithOffsetOnUnsortedList() {
final IntList list = new IntList(); final IntList list = new IntList();
list.addAll(0, 2, 0, 2); list.addAll(0, 2, 0, 2);
Assert.assertEquals(1, list.indexOf(2, 0)); Assert.assertEquals(1, list.indexOf(2, 0));