fix stackoverflow in Int/LongList.intersectionUnsorted
This commit is contained in:
@@ -1092,13 +1092,13 @@ public final class IntList implements Serializable, Cloneable {
|
|||||||
final int bSize = b.size();
|
final int bSize = b.size();
|
||||||
final IntList result;
|
final IntList result;
|
||||||
|
|
||||||
if (aSize < bSize) {
|
if (aSize <= bSize) {
|
||||||
result = new IntList(Math.min(aSize, bSize));
|
result = new IntList(Math.min(aSize, bSize));
|
||||||
|
|
||||||
for (int l = 0; l < aSize; l++) {
|
for (int l = 0; l < aSize; l++) {
|
||||||
final int lv = a.getUnsafe(l);
|
final int lv = a.getUnsafe(l);
|
||||||
|
|
||||||
if (b.indexOf(lv) >= 0) {
|
if (b.indexOf(lv) >= 0 && result.indexOf(lv) < 0) {
|
||||||
result.addUnsafe(lv);
|
result.addUnsafe(lv);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1092,13 +1092,13 @@ public final class LongList implements Serializable, Cloneable {
|
|||||||
final int bSize = b.size();
|
final int bSize = b.size();
|
||||||
final LongList result;
|
final LongList result;
|
||||||
|
|
||||||
if (aSize < bSize) {
|
if (aSize <= bSize) {
|
||||||
result = new LongList(Math.min(aSize, bSize));
|
result = new LongList(Math.min(aSize, bSize));
|
||||||
|
|
||||||
for (int l = 0; l < aSize; l++) {
|
for (int l = 0; l < aSize; l++) {
|
||||||
final long lv = a.getUnsafe(l);
|
final long lv = a.getUnsafe(l);
|
||||||
|
|
||||||
if (b.indexOf(lv) >= 0) {
|
if (b.indexOf(lv) >= 0 && result.indexOf(lv) < 0) {
|
||||||
result.addUnsafe(lv);
|
result.addUnsafe(lv);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1565,6 +1565,14 @@ public class IntListTest {
|
|||||||
final IntList actual = IntList.intersection(a, b);
|
final IntList actual = IntList.intersection(a, b);
|
||||||
Assertions.assertEquals(IntList.of(4), actual);
|
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
|
@Test
|
||||||
|
|||||||
@@ -1555,6 +1555,14 @@ public class LongListTest {
|
|||||||
final LongList actual = LongList.intersection(a, b);
|
final LongList actual = LongList.intersection(a, b);
|
||||||
Assertions.assertEquals(LongList.of(4), actual);
|
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
|
@Test
|
||||||
|
|||||||
Reference in New Issue
Block a user