Я пытаюсь изучить производительность LinkedList по сравнению с ArrayList. Я сделал свой метод удаления следующим образом.
Данные В LinkedList, который удаляется, находится около 1 миллиона элементов. Моя проблема после удаления всех элементов: пришло время записи. Если я использую Java LinkedList remove(int index) Время: 2000 наносекунд Если я использую свой Custom remove(int index) Время: 34407000 наносекунд
Может кто-нибудь посмотреть мой код и сказать мне, где я ошибаюсь. На самом деле я предполагаю удалить данные по позициям индекса, поскольку сравнение, которое я пытаюсь достичь, выполняется по позициям индекса для ArrayList.
public Object remove(int index)
{
checkElementIndex(index);
return unlink(getNode(index));
}
private Object unlink(ListNode node)
{
final Object element = node.item;
final ListNode next = node.next;
final ListNode prev = node.prev;
if (prev == null)
{
first = next;
} else
{
prev.next = next;
node.prev = null;
}
if (next == null)
{
last = prev;
} else
{
next.prev = prev;
node.next = null;
}
node.item = null;
size--;
return element;
}
private ListNode getNode(int index)
{
if (index < (size >> 1))
{
ListNode node = first;
for (int i = 0; i < index; i++)
{
node = node.next;
}
return node;
} else
{
ListNode node = last;
for (int i = size - 1; i > index; i--)
{
node = node.prev;
}
return node;
}
}
private void checkElementIndex(int index)
{
if (index < 0 || index >= size)
{
throw new IndexOutOfBoundsException("Index: " + index + ", Size: " + size);
}
}
// BOTH THE LIST CONTAIN 1million items.
startTime = System.nanoTime();
for (int i = linkedList.size()-1; i >= 0; i--)
{
linkedList.remove(i);
}
endTime = System.nanoTime();
duration = endTime - startTime;
System.out.println("LinkedList Removal Time: " + duration);
// This is the Java Collection LinkedList
startTime = System.nanoTime();
for (int i = linkedList.size()-1; i >= 0; i--)
{
javaLinkedList.remove(i);
}
endTime = System.nanoTime();
duration = endTime - startTime;
System.out.println("My Removal Time: " + duration);
Я ценю каждое возможное предложение. Спасибо.
LinkedList
, а это означает, что, скорее всего, проблема не в этих методах. - person awksp   schedule 07.05.2014LinkedList
, поэтому я могу предположить, что эти методы не являются проблемой, если только я что-то не пропустил. Попробуйте профилировщик. Кроме того, как вы синхронизируете свой код? - person awksp   schedule 07.05.2014