ArayListとLinkdListの違い
2889 ワード
ArayListとLinkdListの大まかな違いは、一般的に知られています.1.ArayListは、動的配列に基づくデータ構造を実現し、LinkdListは、チェーンベースのデータ構造に基づいています.2.ランダムアクセスgetとsetに対して、ArayListはLinked Listより優れていると思います.なぜならLinked Listはポインタを移動するからです.3.追加と削除操作addとremoveに対して、Linded ListはArayListがデータを移動するために優位を占めています. この点は実情による.単一のデータだけを挿入または削除すると、ArayListの速度はかえってLinked Listより優れている.ただし、一括ランダム挿入削除データの場合、Linked Listの速度はArayListよりも大きく、ArayListは挿入データごとに挿入点およびその後のすべてのデータを移動します. この点は実験しました.それぞれ200000本の「記録」があるArayListとLinkdListの首位は20000本のデータを挿入し、Linked Listは約20分の1を費やす.
for(int m=0;m<20000;m+){ linkedlist.add(m,null) //2000本のデータの前に20000本のデータを挿入すると、LinkdListは1125 msしか使用できません.これがLinked Listの強みです. } long タイム4 = new Dte().getTime(); System.out.print(batch) linkedlist add:「); System.out.println(time 4) - time 3); for(int n=0;n<20000;n+){ arraylist.add(n null); //200000本のデータの前に20000本のデータを挿入すると、ArayListは18375 msを使いました.時間はarraylistの20倍近くかかります(テスト時のマシン性能を見ます). } long タイム5 = new Date().getTime(); System.out.print(batch) arraylist add:「); System.out.println(time 5) - time 4);
4.検索操作indexOf、lastIndexOf、containsなどは、ほぼ同じです.5.ランダム検索指定ノードの操作get、ARrayListの速度はLinked Listより速いです.ここでは理論的に分析しても、ArayListは最後にデータを挿入したり削除したりすると、かえってLinked Listより速いです.2000本のデータを挿入したり削除したりしたりしたりしました.
for(int m=0;m<20000;m+){ linkedlist.add(m,null) //2000本のデータの前に20000本のデータを挿入すると、LinkdListは1125 msしか使用できません.これがLinked Listの強みです. } long タイム4 = new Dte().getTime(); System.out.print(batch) linkedlist add:「); System.out.println(time 4) - time 3); for(int n=0;n<20000;n+){ arraylist.add(n null); //200000本のデータの前に20000本のデータを挿入すると、ArayListは18375 msを使いました.時間はarraylistの20倍近くかかります(テスト時のマシン性能を見ます). } long タイム5 = new Date().getTime(); System.out.print(batch) arraylist add:「); System.out.println(time 5) - time 4);
4.検索操作indexOf、lastIndexOf、containsなどは、ほぼ同じです.5.ランダム検索指定ノードの操作get、ARrayListの速度はLinked Listより速いです.ここでは理論的に分析しても、ArayListは最後にデータを挿入したり削除したりすると、かえってLinked Listより速いです.2000本のデータを挿入したり削除したりしたりしたりしました.
/* insert200000 linkedlist arraylist
* ,arraylist linkedlist
*/
public static void insertList(LinkedList linklist, ArrayList arraylist) {
long time1 = new Date().getTime();
System.out.println(time1);
for (int i = 0; i < 200000; i++) {
linklist.add(i, "linklist" + i);
}
long time2 = new Date().getTime();
System.out.println(time2 - time1);
for (int j = 0; j < 200000; j++) {
arraylist.add(j, "arraylist" + j);
}
long time3 = new Date().getTime();
System.out.println(time3 - time2);
}
/*delete linkedlist arraylist 200000
* ,arraylist linkedlist
*/
public static void deleteList(LinkedList linklist, ArrayList arraylist) {
long time1 = new Date().getTime();
System.out.println(time1);
for (int i = 199999; i >= 0; i--) {
linklist.remove(i);
}
long time2 = new Date().getTime();
System.out.println(time2 - time1);
for (int j = 199999; j >= 0; j--) {
arraylist.remove(j);
}
long time3 = new Date().getTime();
System.out.println(time3 - time2);
}
public static void main(String args[]) {
LinkedList linkedlist = new LinkedList();
ArrayList arraylist = new ArrayList();
insertList(linkedlist, arraylist);
//
挿入:LinkdList 578 msArayList 437 ms削除:Linked List 31 msArayList 16 ms