fix stackoverflow in Int/LongList.intersectionUnsorted

This commit is contained in:
2019-09-07 16:50:40 +02:00
parent 86f12e0af6
commit 4d92197423
4 changed files with 20 additions and 4 deletions

View File

@@ -1092,13 +1092,13 @@ public final class IntList implements Serializable, Cloneable {
final int bSize = b.size();
final IntList result;
if (aSize < bSize) {
if (aSize <= bSize) {
result = new IntList(Math.min(aSize, bSize));
for (int l = 0; l < aSize; l++) {
final int lv = a.getUnsafe(l);
if (b.indexOf(lv) >= 0) {
if (b.indexOf(lv) >= 0 && result.indexOf(lv) < 0) {
result.addUnsafe(lv);
}

View File

@@ -1092,13 +1092,13 @@ public final class LongList implements Serializable, Cloneable {
final int bSize = b.size();
final LongList result;
if (aSize < bSize) {
if (aSize <= bSize) {
result = new LongList(Math.min(aSize, bSize));
for (int l = 0; l < aSize; l++) {
final long lv = a.getUnsafe(l);
if (b.indexOf(lv) >= 0) {
if (b.indexOf(lv) >= 0 && result.indexOf(lv) < 0) {
result.addUnsafe(lv);
}

View File

@@ -1565,6 +1565,14 @@ public class IntListTest {
final IntList actual = IntList.intersection(a, b);
Assertions.assertEquals(IntList.of(4), actual);
}
{
final IntList a = IntList.of(1, 4, 3, 2, 4);
final IntList b = IntList.of(4, 3, 4, 4, 2);
final IntList actual = IntList.intersection(a, b);
actual.sort();
Assertions.assertEquals(IntList.of(2, 3, 4), actual);
}
}
@Test

View File

@@ -1555,6 +1555,14 @@ public class LongListTest {
final LongList actual = LongList.intersection(a, b);
Assertions.assertEquals(LongList.of(4), actual);
}
{
final LongList a = LongList.of(1, 4, 3, 2, 4);
final LongList b = LongList.of(4, 3, 4, 4, 2);
final LongList actual = LongList.intersection(a, b);
actual.sort();
Assertions.assertEquals(LongList.of(2, 3, 4), actual);
}
}
@Test