Java 中 ArrayList 和 LinkedList 的區別

Mohammad Irfan 2023年1月30日 2022年1月13日
  1. Java 中的 ArrayList 示例
  2. Java 中的 LinkedList 示例
Java 中 ArrayList 和 LinkedList 的區別

本教程介紹在 Java 中如何初始化 char 和 char 型別的初始值。

在 Java 中,ArrayList 和 LinkedList 都是實現 List 介面的類。ArrayList 是 List 介面的可調整大小的陣列實現,而 LinkedList 是 Java 中 List 介面的雙向連結串列實現。

ArrayList 和 LinkedList 都用於儲存資料,但由於實現型別的不同而存在一些差異。在本文中,我們將通過示例來總結這些之間的一些主要差異。

操作 ArrayList LinkedList
新增元素 花更多時間 花更少的時間
訪問元素 花更少的時間 花更多時間
刪除元素 花更多時間 花更少的時間
迭代元素 花更少的時間 花更多時間
搜尋元素 花更少的時間 花更多時間
  • LinkedList 的效能問題

它使用大量不利於快取區域性性的小記憶體物件,並在整個過程中產生效能問題。

儘管 LinkedList 新增和刪除元素的速度很快,但是如果我們訪問特定的元素,它就很慢。相比之下,ArrayList 訪問特定元素的速度很快,但如果新增則很慢,如果從中間刪除元素則很慢。

Java 中的 ArrayList 示例

在這個例子中,我們建立了一個 ArrayList 並應用了一些操作,例如新增、刪除和訪問元素。我們在執行操作時測量時間,以便我們可以瞭解 ArrayList 和 LinkedList 之間的效能差異。請參閱下面的示例。

import java.util.ArrayList;
import java.util.List;

public class SimpleTesting{
	public static void main(String[] args){
		List<Integer> list = new ArrayList<Integer>();
		System.out.println("Adding Time : "+addElement(list, 10));
		System.out.println("Adding Time : "+addElement(list, 2));
		System.out.println(list);
		System.out.println("Accessing Time : "+accessElement(list, 1));
		System.out.println("Removing Time : "+removeElement(list, 1));
		System.out.println(list);
	}
	static long addElement(List<Integer> list, int element) {
	    long starttime = System.nanoTime();
		list.add(element);
	    long endtime = System.nanoTime();
		return (endtime-starttime);
	}
	static long accessElement(List<Integer> list, int index) {
	    long starttime = System.nanoTime();
		int el = list.get(index);
		System.out.println("Element found : "+el);
	    long endtime = System.nanoTime();
		return (endtime-starttime);
	}
	static long removeElement(List<Integer> list, int index) {
	    long starttime = System.nanoTime();
		list.remove(index);
	    long endtime = System.nanoTime();
		return (endtime-starttime);
	}
}

輸出:

Adding Time : 48556
Adding Time : 2090
[10, 2]
Element found : 2
Accessing Time : 42301
Removing Time : 6471
[10]

Java 中的 LinkedList 示例

在這個例子中,我們建立了一個 LinkedList 並應用了一些操作,例如新增、刪除和訪問元素。我們在執行操作時也會測量時間,以便我們可以瞭解 ArrayList 和 LinkedList 之間的效能差異。請參閱下面的示例。

import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;

public class SimpleTesting{
	public static void main(String[] args){
		List<Integer> list = new LinkedList<Integer>();
		System.out.println("Adding Time : "+addElement(list, 10));
		System.out.println("Adding Time : "+addElement(list, 2));
		System.out.println(list);
		System.out.println("Accessing Time : "+accessElement(list, 1));
		System.out.println("Removing Time : "+removeElement(list, 1));
		System.out.println(list);
	}
	static long addElement(List<Integer> list, int element) {
	    long starttime = System.nanoTime();
		list.add(element);
	    long endtime = System.nanoTime();
		return (endtime-starttime);
	}
	static long accessElement(List<Integer> list, int index) {
	    long starttime = System.nanoTime();
		int el = list.get(index);
		System.out.println("Element found : "+el);
	    long endtime = System.nanoTime();
		return (endtime-starttime);
	}
	static long removeElement(List<Integer> list, int index) {
	    long starttime = System.nanoTime();
		list.remove(index);
	    long endtime = System.nanoTime();
		return (endtime-starttime);
	}
}

輸出:

Adding Time : 82591
Adding Time : 4218
[10, 2]
Element found : 2
Accessing Time : 54516
Removing Time : 7572
[10]

相關文章 - Java ArrayList