Я читаю различия между ArrayList
и LinkedList
, указанные в Когда использовать LinkedList вместо ArrayList?< /а>. Я разработал небольшой пример приложения, чтобы проверить главное преимущество LinkedList
, но полученные результаты не подтверждают, что LinkedList
перевешивает ArrayList
в производительности операции:
ListIterator.add(E element)
Вот мой код:
public static void main(String[] args) {
int number = 100000;
long startTime1 = System.currentTimeMillis();
fillLinkedList(number);
long stopTime1 = System.currentTimeMillis();
long startTime2 = System.currentTimeMillis();
fillArrayList(number);
long stopTime2 = System.currentTimeMillis();
System.out.println(" LinkedList needed: "+ (stopTime1 - startTime1));
System.out.println(" ArrayList needed: "+ (stopTime2 - startTime2));
}
public static void fillLinkedList(int number){
LinkedList<Integer> list = new LinkedList<Integer>();
ListIterator<Integer> it = list.listIterator();
int i = 0;
while(i++<number){
it.add(i);
}
// System.out.println("LinkedList size: "+list.size());
}
public static void fillArrayList(int number){
ArrayList<Integer> list = new ArrayList<Integer>();
ListIterator<Integer> it = list.listIterator();
int i = 0;
while(i++<number){
it.add(i);
}
// System.out.println("ArrayList size: "+list.size());
}
Измерение дает:
number 10,000 100,000 500,000 1,000,000 5,000,000
ArrayList 7 17 60 77 170
LinkedList 7 21 89 838 4127
Я заметил, что увеличение количества элементов значительно снижает производительность LinkedList
, в то время как ArrayList
ведет себя значительно лучше. Я понял что-то ложное?
LinkedList
вам нужно создать объектNode
для каждой вставки. СArrayList
вам нужно увеличить массив. - person Sotirios Delimanolis   schedule 05.10.2013System.nanoTime()
вместоSystem.currentTimeMillis()
, поскольку точность последнего намного меньше, и вы фактически измеряете здесь не текущее время, а разницу между двумя точками. - person Sebastiaan van den Broek   schedule 05.10.2013LinkedList
должно быть быстрее, чемArrayList
? Я не вижу ничего в упомянутом вопросе, который поддерживает это предположение.LinkedList
иArrayList
имеют одинаковое асимптотическое амортизированное поведение при добавлении. Однако для последнего постоянный фактор существенно меньше. - person nosid   schedule 05.10.2013