Performance tweaks to FastStatementList and additional unit tests.

pull/84/head
Brett Wooldridge 11 years ago
parent 20db89b0df
commit 02f23eb90e

@ -55,17 +55,16 @@ public final class FastStatementList
*/ */
public void add(Statement element) public void add(Statement element)
{ {
try if (size < elementData.length)
{ {
elementData[size] = element; elementData[size++] = element;
size++;
} }
catch (ArrayIndexOutOfBoundsException oob) else
{ {
// overflow-conscious code // overflow-conscious code
int oldCapacity = elementData.length; final int oldCapacity = elementData.length;
int newCapacity = oldCapacity << 1; final int newCapacity = oldCapacity << 1;
Statement[] newElementData = new Statement[newCapacity]; final Statement[] newElementData = new Statement[newCapacity];
System.arraycopy(elementData, 0, newElementData, 0, oldCapacity); System.arraycopy(elementData, 0, newElementData, 0, oldCapacity);
newElementData[size++] = element; newElementData[size++] = element;
elementData = (Statement[]) newElementData; elementData = (Statement[]) newElementData;
@ -96,7 +95,7 @@ public final class FastStatementList
{ {
if (element == elementData[index]) if (element == elementData[index])
{ {
int numMoved = size - index - 1; final int numMoved = size - index - 1;
if (numMoved > 0) if (numMoved > 0)
{ {
System.arraycopy(elementData, index + 1, elementData, index, numMoved); System.arraycopy(elementData, index + 1, elementData, index, numMoved);

@ -11,6 +11,50 @@ import com.zaxxer.hikari.util.FastStatementList;
public class TestFastStatementList public class TestFastStatementList
{ {
@Test
public void testAddRemove()
{
ArrayList<Statement> verifyList = new ArrayList<Statement>();
FastStatementList list = new FastStatementList();
for (int i = 0; i < 32; i++)
{
StubStatement statement = new StubStatement(null);
list.add(statement);
verifyList.add(statement);
}
for (int i = 0; i < 32; i++)
{
Assert.assertNotNull("Element " + i + " was null but should be " + verifyList.get(i), list.get(0));
int size = list.size();
list.remove(verifyList.get(i));
Assert.assertSame(size - 1, list.size());
}
}
@Test
public void testAddRemoveTail()
{
ArrayList<Statement> verifyList = new ArrayList<Statement>();
FastStatementList list = new FastStatementList();
for (int i = 0; i < 32; i++)
{
StubStatement statement = new StubStatement(null);
list.add(statement);
verifyList.add(statement);
}
for (int i = 31; i >= 0; i--)
{
Assert.assertNotNull("Element " + i, list.get(i));
int size = list.size();
list.remove(verifyList.get(i));
Assert.assertSame(size - 1, list.size());
}
}
@Test @Test
public void testOverflow() public void testOverflow()
{ {

Loading…
Cancel
Save