java c 性能比較_java 中ArrayList與LinkedList性能比較

java 中ArrayList與LinkedList性能比較

今天看一框架的代碼,看到有些 可以使用ArrayList的地方 使用的是 LinkedList,用到的情景是在一個循環里面進行順序的插入操作。

眾所周知java里面List接口有兩個實現ArrayList 和 LinkedList,他們的實現原理分別是c語言中介紹的數組和鏈表。

正如學習數據結構時的認識,對于插入操作,鏈表的結構更高效,原因是可以通過修改節點的指針 就可以完成插入操作, 而不像數組,

需要把插入位置之后的數組元素依次后移。

但是,實際情況真如上面設想一樣嗎,下面通過一個簡單的例子實踐,看能得出什么結論。

public static void main(String[] args) {

List arrayList = new ArrayList();

List linkedList = new LinkedList();

long time1 = System.currentTimeMillis();

for(int i = 0; i < 1000000; i++) {

arrayList.add(new String("abc"));

}

long time2 = System.currentTimeMillis();

for(int i = 0; i < 1000000; i++) {

linkedList.add(new String("abc"));

}

long time3 = System.currentTimeMillis();

System.out.println("arrayList.insert_time = " + (time2 - time1));

System.out.println("linkedList.insert_time = " + (time3 - time2));

long time11 = System.currentTimeMillis();

for(int i = 0; i < 10000; i++) {

int random = RandomUtils.nextInt(10000);

String temp = arrayList.get(random);

}

long time12 = System.currentTimeMillis();

for(int i = 0; i < 10000; i++) {

int random = RandomUtils.nextInt(10000);

String temp = linkedList.get(random);

}

long time13 = System.currentTimeMillis();

System.out.println("arrayList.read_time = " + (time12 - time11));

System.out.println("linkedList.read_time = " + (time13 - time12));

}

運行結果:

arrayList.insert_time = 188

linkedList.insert_time = 250

arrayList.read_time = 16

linkedList.read_time = 234

通過結果可以看出:無論什么情況,ArrayList更加高效。尤其對于隨機讀取,數組的效率是鏈表的14倍之多。

而插入操作,兩者用時相差不多,但是還是數組的實現效率高一些。

對于其中原因,仔細想想也不難想明白。

當List存儲的內容不多時,寫入List的最后的元素,ArrayList和LinkedList用時差不多。

但是當List存儲的元素個數很大時,通過數組結構實現的ArrayList插入到最后可以通過數組下標很快訪問到,但是LinkedList就需要訪問每個節點直到找到最后的元素再進行插入操作,這中操作步驟的耗時是巨大的,所以列表數量越大,LinkedList就越感吃力了。

當然,對于要求隨機插入的場景,這個時候LinkedList就要比ArrayList適合了。

感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/529204.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/529204.shtml
英文地址,請注明出處:http://en.pswp.cn/news/529204.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

spring aopalliance 包里都有什么_【九倉櫻】翻包記 05 | 是什么讓我的便當包里每天都帶著小企鵝?!...

Sakura | 2020?05バッグ日記:< Whats in my bag ? >這里是一個全新的欄目&#xff0c;關于九倉櫻の日常翻包初衷是想跟大家分享一些有趣好玩的東西想知道我到底有多少個包包嗎&#xff1f;我的包包里都會有哪些你想不到的東西呢&#xff1f;LIST① MYKONOS 便當包② MY…

java 數據庫操作代碼_JAVA:對數據庫的一系列操作代碼

插入數據import java.sql.*;/*** version 2012-02-22* author*/public classInsertDemo {public static voidmain(String[] args) throws SQLException {Connection conn null;Statement stmt null;String JDriver"com.microsoft.sqlserver.jdbc.SQLServerDriver";//…

java setpaintmode 用法_詳解Paint的各種set方法

(1) 在application配置文件中關閉硬件加速&#xff1a;android:allowBackup"true"android:hardwareAccelerated"false"android:icon"drawable/ic_launcher"android:label"string/app_name"android:theme"style/AppTheme" &g…

SPI 讀取不同長度 寄存器_[讀書筆記]《計算機科學速成課》—6 寄存器和內存

上節中介紹的ALU進行計算后得到的結果需要對其進行存儲&#xff0c;可能還要進行多個連續操作&#xff0c;這就需要用到計算機內存了。計算機使用的是隨機存取存儲器&#xff08;Random Access Memory, RAM&#xff09;&#xff0c;其只能在有電的情況下存儲東西。另一種存儲稱…

one more step_KDA新歌《MORE》的一些冷知識:伊芙琳換回原聲,摩托車是定制的

原標題&#xff1a;KDA新歌《MORE》的一些冷知識&#xff1a;伊芙琳換回原聲&#xff0c;摩托車是定制的KDA女團在2020年宣布回歸后就引發了很多的關注&#xff0c;回歸后也是推出了首支單曲《THE BADDEST》&#xff0c;這首歌在之后也引發了不少網友的模仿以及翻唱&#xff0c…

java jdbc連接 代碼塊_java 中JDBC連接數據庫代碼和步驟詳解及實例代碼

?創建一個以JDBC連接數據庫的程序&#xff0c;包含7個步驟&#xff1a;1、加載JDBC驅動程序&#xff1a;在連接數據庫之前&#xff0c;首先要加載想要連接的數據庫的驅動到JVM(Java虛擬機)&#xff0c;這通過java.lang.Class類的靜態方法forName(String className)實現。 例…

Java不是true值不變_Java語言中String a=a;String b=a; 為什么 a==b 值為 true?

目前排名比較靠前的答案都回答得很淺顯易懂了。我這里給你一個最可靠的理論依據(雖然比較晦澀)。Java語言規范(JavaSE 1.8版本)章節3.10.5中對此作了規范&#xff0c;因此所有的Java語言編譯、運行時環境實現都必須依據此規范來實現。里面有這么一句話Moreover, a string liter…

計算H時M分S秒以后是_關于工程量計算-深圳工程量計算培訓

一、梯形體積計算公式&#xff1f;第一種&#xff1a;梯形的體積&#xff08;上底下底&#xff09;高2總長度第二種&#xff1a;把四棱臺延長成椎上截面面積為s,下截面r,臺高為h,那么體積1/3(r-s)*h.若是正梯形物體則為V〔S1&#xff0b;S2&#xff0b;開根號&#xff08;S1*S2…

java數據庫edit_Java數據庫連接——JDBC基礎知識(操作數據庫:增刪改查)

一、JDBC簡介JDBC是連接java應用程序和數據庫之間的橋梁。什么是JDBC?Java語言訪問數據庫的一種規范,是一套API。JDBC (Java Database Connectivity) API&#xff0c;即Java數據庫編程接口&#xff0c;是一組標準的Java語言中的接口和類&#xff0c;使用這些接口和類&#xff…

java ssm 系統的搭建_SSM框架下的javaweb學生管理系統--搭建系統結構

業務需求&#xff1a;一個登錄頁面&#xff0c;一個學生展示頁面&#xff0c;添加、修改、刪除三個功能目的是給大家了解一個初級系統的構造&#xff0c;不寫那么復雜的需求了。從第一步開始&#xff1a;創建項目打開eclipse&#xff0c;點擊右上角的File-->New-->Dynami…

opencv 高通濾波和低通濾波_濾波電路合集(低通濾波,CLCП濾波,DLC濾波,CRC П濾波)...

常見低通濾波電路L 一階濾波C 一階濾波CL 二階濾波RC 二階濾波LC 二階濾波RCR T型三階濾波LCL T型三階濾波CRC π三階濾波CLC π三階濾波開關電源 單級低通濾波回路DLC 型二階濾波器開關電源 雙級串聯式低通濾波回路CLC П型濾波器1、工作原理介紹a.輸入正脈沖時,先給C1充電,充…

matlab語音信號處理實驗_現代通信綜合實驗系統平臺

現代通信綜合實驗系統平臺近30年來&#xff0c;隨著我國電信行業的迅猛發展&#xff0c;該行業的發展水平已成為衡量一個國家實力的一大關鍵因子。行業的發展同時&#xff0c;為當代相關專業大學生創造了極大的就業市場,市場對通信類人才有著極大的需求。培養一代全面型通信類人…

java 異常拋出空指針異常_java.lang.NullPointerException 拋出空指針異常

練習cookie做一個瀏覽商品記錄顯示&#xff0c;第一次會顯示瀏覽過的商品&#xff0c;然后在瀏覽第二次就出現空指針異常2016-6-16 16:51:48 org.apache.catalina.core.StandardWrapperValve invoke嚴重: Servlet.service() for servlet [CookieDemo2] in context with path [/…

iphone儲存空間系統怎么清理_教你快速清理 iPhone 系統緩存垃圾,拒絕卡頓!

「 改變能改變的一切&#xff0c;接受不能改變的一切&#xff01;」▼“iPhone存儲空間”里的系統為何占用了幾十G的甚至上百G的內存&#xff0c;如何清理&#xff1f;當我們使用 iPhone 一段時間之后&#xff0c;系統或應用中會出現一些多余的緩存數據&#xff0c;如果長時間不…

倒N字形排列java_Java排序8大算法實現

概述排序有內部排序和外部排序&#xff0c;內部排序是數據記錄在內存中進行排序&#xff0c;而外部排序是因排序的數據很大&#xff0c;一次不能容納全部的排序記錄&#xff0c;在排序過程中需要訪問外存。我們這里說說八大排序就是內部排序。當n較大&#xff0c;則應采用時間復…

cross_val_score 如何對孤立森林_【收藏】森林防火手抄報素材匯總!

森林防火手抄報模板參考【文字素材參考】01森林防火根據森林火災燃燒中央地點&#xff0c;蔓延速度&#xff0c;受害部位和程度&#xff0c;大致可把森林火災分為三大類:一.地表火 二.樹冠火 三.地下火。以受害森林面積大小為標準&#xff0c;森林火災分為以下四類:1.森林火警:…

java io 轉換流_Java編程IO流中的轉換流

對于IO流中的轉換流&#xff0c;顧名思義&#xff0c;就是將字符流轉換成字節流或者是將字節流轉換成字符流的對象。那么有時候我們得到的是一個字符流&#xff0c;但是我們又需要進行一些計算之類的&#xff0c;或者我們得到的是一個字節流&#xff0c;但是我們又需要進行一些…

pb9 調用系統語音_成都電銷系統一個月多少錢_選擇靈狐傳媒_收費透明

靈狐傳媒表示&#xff1a;成都電銷系統一個月多少錢_選擇靈狐傳媒_收費透明,在成都想要找一家專業的電銷系統&#xff0c;今天小編帶您看看該怎么選擇吧&#xff0c;和研發實踐&#xff0c;融合互聯網、云計算及人工智能、通信、大數據等技術&#xff0c;研發推出了以人工智能為…

java thread 線程銷毀_手把手帶你了解Java線程的實現方式及生命周期原理

前言我們在工作中線程技術很多情況下都能用的到&#xff0c;而且我們在面試的時候&#xff0c;線程技術基本上也是必問的。今天我來從線程的實現方式以及線程的生命周期做一個全面的講解與分析&#xff0c;幫助大家能更好的去了解線程技術。概念我們先來了解下線程和進程的概念…

python自動化_python自動化測試-Behave框架的用法介紹 - python測試學習

測碼學院 Behave框架的用法介紹眾所周知&#xff1a;行為驅動開發((behavior-drivendevelopment&#xff0c;BDD)是一種基于敏捷軟件開發的方法。它可以鼓勵開發人員&#xff0c;業務參與者和QA人員之間的協作。作為另一個Python自動化測試框架&#xff0c;“Behave”允許團隊…