欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java中ArrayList和LinkedList之間的區(qū)別_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

 更新時(shí)間:2017年05月04日 15:20:49   投稿:lijiao  
這篇文章主要為大家詳細(xì)介紹了Java中ArrayList和LinkedList之間的區(qū)別,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

一、ArrayList

ArrayList是一個(gè)可以處理變長(zhǎng)數(shù)組的類型,這里不局限于“數(shù)”組,ArrayList是一個(gè)泛型類,可以存放任意類型的對(duì)象。顧名思義,ArrayList是一個(gè)數(shù)組列表,因此其內(nèi)部是使用一個(gè)數(shù)組來(lái)存放對(duì)象的,因?yàn)镺bject是一切類型的父類,因而ArrayList內(nèi)部是有一個(gè)Object類型的數(shù)組類存放對(duì)象。ArrayList類常用的方法有add()、clear()、get()、indexOf()、remove()、sort()、toArray()、toString()等等,同時(shí)ArrayList內(nèi)部有一個(gè)私有類實(shí)現(xiàn)Iterator接口,因此可以使用iterator()方法得到ArrayList的迭代器,同時(shí),還有一個(gè)私有類實(shí)現(xiàn)了ListIterator接口,因此ArrayList也可以調(diào)用listIterator()方法得到ListIterator迭代器。
由于ArrayList是依靠數(shù)組來(lái)存放對(duì)象的,只不過(guò)封裝起來(lái)了而已,因此其一些查找方法的效率都是O(n),跟普通的數(shù)組效率差不多,只不過(guò)這個(gè)ArrayList是一個(gè)可變”數(shù)組“,并且可以存放一切指定的對(duì)象。
另外,由于ArrayList的所有方法都是默認(rèn)在單一線程下進(jìn)行的,因此ArrayList不具有線程安全性。若想在多線程下使用,應(yīng)該使用Colletions類中的靜態(tài)方法synchronizedList()對(duì)ArrayList進(jìn)行調(diào)用即可。

二、LinkedList

LinkedList可以看做為一個(gè)雙向鏈表,所有的操作都可以認(rèn)為是一個(gè)雙向鏈表的操作,因?yàn)樗鼘?shí)現(xiàn)了Deque接口和List接口。同樣,LinkedList也是線程不安全的,如果在并發(fā)環(huán)境下使用它,同樣用Colletions類中的靜態(tài)方法synchronizedList()對(duì)LinkedList進(jìn)行調(diào)用即可。

在LinkedList的內(nèi)部實(shí)現(xiàn)中,并不是用普通的數(shù)組來(lái)存放數(shù)據(jù)的,而是使用結(jié)點(diǎn)<Node>來(lái)存放數(shù)據(jù)的,有一個(gè)指向鏈表頭的結(jié)點(diǎn)first和一個(gè)指向鏈表尾的結(jié)點(diǎn)last。不同于ArrayList只能在數(shù)組末尾添加數(shù)據(jù),LinkList可以很方便在鏈表頭或者鏈表尾插入數(shù)據(jù),或者在指定結(jié)點(diǎn)前后插入數(shù)據(jù),還提供了取走鏈表頭或鏈表尾的結(jié)點(diǎn),或取走中間某個(gè)結(jié)點(diǎn),還可以查詢某個(gè)結(jié)點(diǎn)是否存在。add()方法默認(rèn)在鏈表尾部插入數(shù)據(jù)??傊?,LinkedList提供了大量方便的操作方法,并且它的插入或增加等方法的效率明顯高于ArrayList類型,但是查詢的效率要低一點(diǎn),因?yàn)樗且粋€(gè)雙向鏈表。

因此,LinkedList與ArrayList最大的區(qū)別是LinkedList更加靈活,并且部分方法的效率比ArrayList對(duì)應(yīng)方法的效率要高很多,對(duì)于數(shù)據(jù)頻繁出入的情況下,并且要求操作要足夠靈活,建議使用LinkedList;對(duì)于數(shù)組變動(dòng)不大,主要是用來(lái)查詢的情況下,可以使用ArrayList。

import java.util.* ; 
public class ListDemo01{ 
  public static void main(String args[]){ 
    List<Integer> li = new LinkedList<Integer>() ; 
    long startTime = System.currentTimeMillis() ; 
    for(int i=0;i<1000000;i++){ 
      li.add(0,i) ;        //print : 803 
      //li.add(i) ;        //print : 790 
    } 
    long endTime = System.currentTimeMillis() ; 
    System.out.println(endTime-startTime) ; 
  } 
} 

下面的代碼得不出結(jié)果速度太慢

import java.util.* ; 
public class ListDemo01{ 
  public static void main(String args[]){ 
    List<Integer> li = new LinkedList<Integer>() ; 
    for(int i=0;i<1000000;i++){ 
      li.add(0,i) ;        //print : 803 
      //li.add(i) ;        //print : 790 
    } 
    long startTime = System.currentTimeMillis() ; 
    for(int i=0;i<1000000;i++){ 
      li.get(i) ; 
    } 
    long endTime = System.currentTimeMillis() ; 
    System.out.println(endTime-startTime) ; 
  } 
} 

下面化成ArrayList速度就超快

import java.util.* ; 
public class ListDemo01{ 
  public static void main(String args[]){ 
    List<Integer> li = new ArrayList<Integer>() ; 
    for(int i=0;i<1000000;i++){ 
      li.add(i) ;        
    } 
    long startTime = System.currentTimeMillis() ; 
    for(int i=0;i<1000000;i++){ 
      li.get(i) ;   //print : 15     
    } 
    long endTime = System.currentTimeMillis() ; 
    System.out.println(endTime-startTime) ; 
  } 
} 

remove方法對(duì)LinkedList類的使用

a.利用iterator類

import java.util.* ; 
public class ListDemo01{ 
  public static void main(String args[]){ 
    List<Integer> li = new LinkedList<Integer>() ; 
    for(int i=0;i<1000000;i++){ 
      li.add(i) ;        
    } 
    long startTime = System.currentTimeMillis() ; 
    Iterator<Integer> it = li.iterator() ; 
    while(it.hasNext()){ 
      if(it.next()%2==0){ 
        it.remove() ; 
      } 
    } 
    long endTime = System.currentTimeMillis() ; 
    System.out.println(endTime-startTime) ; 
  } 
} 

b.不利用iterator的話則則需要調(diào)用get方法。則效率很低

import java.util.* ; 
public class ListDemo01{ 
  public static void main(String args[]){ 
    List<Integer> li = new LinkedList<Integer>() ; 
    for(int i=0;i<1000000;i++){ 
      li.add(i) ;        
    } 
    long startTime = System.currentTimeMillis() ; 
    for(int i=0;i<10000;i++){ 
      if(li.get(i)%2==0){ 
        li.remove(i) ; 
      } 
    } 
    long endTime = System.currentTimeMillis() ; 
    System.out.println(endTime-startTime) ; 
  } 
} 

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • FeignMultipartSupportConfig上傳圖片配置方式

    FeignMultipartSupportConfig上傳圖片配置方式

    這篇文章主要介紹了FeignMultipartSupportConfig上傳圖片配置方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • Java NumberFormat 類的詳解及實(shí)例

    Java NumberFormat 類的詳解及實(shí)例

    這篇文章主要介紹了Java NumberFormat 類的詳解及實(shí)例的相關(guān)資料,數(shù)字格式化類按照本地風(fēng)格習(xí)慣進(jìn)行的數(shù)字顯示,需要的朋友可以參考下
    2017-08-08
  • springboot如何通過(guò)controller層實(shí)現(xiàn)頁(yè)面切換

    springboot如何通過(guò)controller層實(shí)現(xiàn)頁(yè)面切換

    在Spring Boot中,通過(guò)Controller層實(shí)現(xiàn)頁(yè)面切換背景,Spring Boot的默認(rèn)注解是@RestController,它包含了@Controller和@ResponseBody,@ResponseBody會(huì)將返回值轉(zhuǎn)換為字符串返回,因此無(wú)法實(shí)現(xiàn)頁(yè)面切換,將@RestController換成@Controller
    2024-12-12
  • Java多線程死鎖示例

    Java多線程死鎖示例

    這篇文章主要介紹了Java多線程死鎖,結(jié)合實(shí)例形式分析了Java多線程出現(xiàn)死鎖的相關(guān)原因與操作注意事項(xiàng),需要的朋友可以參考下
    2018-08-08
  • Java類成員訪問(wèn)權(quán)限控制知識(shí)總結(jié)

    Java類成員訪問(wèn)權(quán)限控制知識(shí)總結(jié)

    這篇文章主要介紹了Java類成員訪問(wèn)權(quán)限控制知識(shí)總結(jié),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-04-04
  • spring cloud oauth2 實(shí)現(xiàn)用戶認(rèn)證登錄的示例代碼

    spring cloud oauth2 實(shí)現(xiàn)用戶認(rèn)證登錄的示例代碼

    這篇文章主要介紹了spring cloud oauth2 實(shí)現(xiàn)用戶認(rèn)證登錄的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-10-10
  • java使用UDP實(shí)現(xiàn)多人聊天功能

    java使用UDP實(shí)現(xiàn)多人聊天功能

    這篇文章主要為大家詳細(xì)介紹了java使用UDP實(shí)現(xiàn)多人聊天功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • IDEA快速顯示Run DashBoard的圖文詳解

    IDEA快速顯示Run DashBoard的圖文詳解

    這篇文章主要介紹了IDEA快速顯示Run DashBoard的圖文詳解,本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-12-12
  • Sharding-JDBC自動(dòng)實(shí)現(xiàn)MySQL讀寫分離的示例代碼

    Sharding-JDBC自動(dòng)實(shí)現(xiàn)MySQL讀寫分離的示例代碼

    本文主要介紹了Sharding-JDBC自動(dòng)實(shí)現(xiàn)MySQL讀寫分離,優(yōu)點(diǎn)在于數(shù)據(jù)源完全有Sharding-JDBC托管,寫操作自動(dòng)執(zhí)行master庫(kù),讀操作自動(dòng)執(zhí)行slave庫(kù),感興趣的可以了解一下
    2021-11-11
  • Restful之通用返回格式類設(shè)計(jì)

    Restful之通用返回格式類設(shè)計(jì)

    這篇文章主要介紹了Restful之通用返回格式類設(shè)計(jì),具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-12-12

最新評(píng)論