从数组列表的末尾删除项的时间复杂度为o(1),就像从链表的开头删除项一样。但是当我用java测试链表时,它还是快了一点,我不明白为什么。有人能解释为什么链表在时间复杂度为o(1)的情况下仍然更快吗?
我不认为我的代码能帮你回答我的问题,因为它更多的是关于数据结构的。但这里只是以防万一(不要介意法语,它是用来做作业的):
LinkedList<Integer> LinkL = new LinkedList<Integer>();
ArrayList<Integer> ArrL = new ArrayList<Integer>();
int N;
N = 1000;
//2.creer le Linked List
for(int i=0; i<N; i++) {
LinkL.add(i);
}
//System.out.println(LinkL);
//3. et 4.Supprimer les elements de Linked List et afficher le temps
long debut = System.nanoTime();
for(int i=0; i<N; i++) {
LinkL.removeFirst();
}
long fin = System.nanoTime();
long tempsExecution = fin - debut;
System.out.println("1.Suppression des éléments de LinkL avec la méthode \nremoveFirst( ) de LinkedList, avec une durée \nduréeLinkedList = "+tempsExecution+ " nanosecondes"); //-
//5.Creer Array List
for(int i=0; i<N; i++) {
ArrL.add(i);
}
//System.out.println(ArrL);
//6.Supprimer les elements de Array List et afficher le temps
debut = System.nanoTime();
for(int i=0; i<N; i++) {
ArrL.remove(0);
}
fin = System.nanoTime();
tempsExecution = fin - debut;
System.out.println("\n2.Suppression des éléments de ArrL avec remove(0) d’un \nArrayList, durée duréeArrayDirect = "+tempsExecution+ " nanosecondes");
//7. Recreer ArrL
for(int i=0; i<N; i++) {
ArrL.add(i);
}
//System.out.println(ArrL);
//Supprimer les elements de ArrL
debut = System.nanoTime();
for(int i=N-1; i>=0; i--) {
ArrL.remove(i);
}
fin = System.nanoTime();
tempsExecution = fin - debut;
System.out.println("\n3.Suppression des éléments de ArrL avec remove(i) ciblant \nles derniers éléments d’un ArrayList, avec une durée \nde duréeArrayInverse = "+tempsExecution+ " nanosecondes");
}
}
提前谢谢。
暂无答案!
目前还没有任何答案,快来回答吧!