最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

通過(guò)實(shí)例解析Java List正確使用方法

 更新時(shí)間:2020年11月03日 14:25:38   作者:Hollis在51CTO  
這篇文章主要介紹了通過(guò)實(shí)例解析Java List正確使用方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

List是Java中比較常用的集合類,關(guān)于List接口有很多實(shí)現(xiàn)類,本文就來(lái)簡(jiǎn)單介紹下其中幾個(gè)重點(diǎn)的實(shí)現(xiàn)ArrayList、LinkedList和Vector之間的關(guān)系和區(qū)別。

List

List 是一個(gè)接口,它繼承于Collection的接口。它代表著有序的隊(duì)列。當(dāng)我們討論List的時(shí)候,一般都和Set作比較。

List中元素可以重復(fù),并且是有序的(這里的有序指的是按照放入的順序進(jìn)行存儲(chǔ)。如按照順序把1,2,3存入List,那么,從List中遍歷出來(lái)的順序也是1,2,3)。

Set中的元素不可以重復(fù),并且是無(wú)序的(從set中遍歷出來(lái)的數(shù)據(jù)和放入順序沒有關(guān)系)。

下面是Java中的集合類的關(guān)系圖。從中可以大致了解集合類之間的關(guān)系


java-collection-hierarchy

ArrayList、 LinkedList 和 Vector之間的區(qū)別

從上圖可以看出,ArrayList、 LinkedList 和 Vector都實(shí)現(xiàn)了List接口,是List的三種實(shí)現(xiàn),所以在用法上非常相似。他們之間的主要區(qū)別體現(xiàn)在不同操作的性能上。后面會(huì)詳細(xì)分析。

ArrayList

ArrayList底層是用數(shù)組實(shí)現(xiàn)的,可以認(rèn)為ArrayList是一個(gè)可改變大小的數(shù)組。隨著越來(lái)越多的元素被添加到ArrayList中,其規(guī)模是動(dòng)態(tài)增加的。

LinkedList

LinkedList底層是通過(guò)雙向鏈表實(shí)現(xiàn)的。所以,LinkedList和ArrayList之前的區(qū)別主要就是數(shù)組和鏈表的區(qū)別。

數(shù)組中查詢和賦值比較快,因?yàn)榭梢灾苯油ㄟ^(guò)數(shù)組下標(biāo)訪問(wèn)指定位置。

鏈表中刪除和增加比較快,因?yàn)榭梢灾苯油ㄟ^(guò)修改鏈表的指針(Java中并無(wú)指針,這里可以簡(jiǎn)單理解為指針。其實(shí)是通過(guò)Node節(jié)點(diǎn)中的變量指定)進(jìn)行元素的增刪。

所以,LinkedList和ArrayList相比,增刪的速度較快。但是查詢和修改值的速度較慢。同時(shí),LinkedList還實(shí)現(xiàn)了Queue接口,所以他還提供了offer(), peek(), poll()等方法。

Vector

Vector和ArrayList一樣,都是通過(guò)數(shù)組實(shí)現(xiàn)的,但是Vector是線程安全的。和ArrayList相比,其中的很多方法都通過(guò)同步(synchronized)處理來(lái)保證線程安全。

如果你的程序不涉及到線程安全問(wèn)題,那么使用ArrayList是更好的選擇(因?yàn)閂ector使用synchronized,必然會(huì)影響效率)。

二者之間還有一個(gè)區(qū)別,就是擴(kuò)容策略不一樣。在List被第一次創(chuàng)建的時(shí)候,會(huì)有一個(gè)初始大小,隨著不斷向List中增加元素,當(dāng)List認(rèn)為容量不夠的時(shí)候就會(huì)進(jìn)行擴(kuò)容。Vector缺省情況下自動(dòng)增長(zhǎng)原來(lái)一倍的數(shù)組長(zhǎng)度,ArrayList增長(zhǎng)原來(lái)的50%。

ArrayList 和 LinkedList的性能對(duì)比

使用以下代碼對(duì)ArrayList和LinkedList中的幾種主要操作所用時(shí)間進(jìn)行對(duì)比:

ArrayList<Integer> arrayList = new ArrayList<Integer>();
LinkedList<Integer> linkedList = new LinkedList<Integer>();

// ArrayList add
long startTime = System.nanoTime();

for (int i = 0; i < 100000; i++) {
  arrayList.add(i);
}
long endTime = System.nanoTime();
long duration = endTime - startTime;
System.out.println("ArrayList add: " + duration);

// LinkedList add
startTime = System.nanoTime();

for (int i = 0; i < 100000; i++) {
  linkedList.add(i);
}
endTime = System.nanoTime();
duration = endTime - startTime;
System.out.println("LinkedList add: " + duration);

// ArrayList get
startTime = System.nanoTime();

for (int i = 0; i < 10000; i++) {
  arrayList.get(i);
}
endTime = System.nanoTime();
duration = endTime - startTime;
System.out.println("ArrayList get: " + duration);

// LinkedList get
startTime = System.nanoTime();

for (int i = 0; i < 10000; i++) {
  linkedList.get(i);
}
endTime = System.nanoTime();
duration = endTime - startTime;
System.out.println("LinkedList get: " + duration);

// ArrayList remove
startTime = System.nanoTime();

for (int i = 9999; i >=0; i--) {
  arrayList.remove(i);
}
endTime = System.nanoTime();
duration = endTime - startTime;
System.out.println("ArrayList remove: " + duration);

// LinkedList remove
startTime = System.nanoTime();

for (int i = 9999; i >=0; i--) {
  linkedList.remove(i);
}
endTime = System.nanoTime();
duration = endTime - startTime;
System.out.println("LinkedList remove: " + duration);

結(jié)果:

ArrayList add: 13265642
LinkedList add: 9550057
ArrayList get: 1543352
LinkedList get: 85085551
ArrayList remove: 199961301
LinkedList remove: 85768810
arraylist-vs-linkedlist1


他們的表現(xiàn)的差異是顯而易見的。在添加和刪除操作上LinkedList更快,但在查詢速度較慢。

如何選擇

如果涉及到多線程,那么就選擇Vector(當(dāng)然,你也可以使用ArrayList并自己實(shí)現(xiàn)同步)。

如果不涉及到多線程就從LinkedList、ArrayList中選。 LinkedList更適合從中間插入或者刪除(鏈表的特性)。 ArrayList更適合檢索和在末尾插入或刪除(數(shù)組的特性)。

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

相關(guān)文章

  • Java和Python現(xiàn)在都挺火,我應(yīng)該怎么選?

    Java和Python現(xiàn)在都挺火,我應(yīng)該怎么選?

    這篇文章主要介紹了Java和Python現(xiàn)在都挺火,我應(yīng)該怎么選?本文通過(guò)全面分析給大家做個(gè)參考,需要的朋友可以參考下
    2020-07-07
  • Spring的懶加載機(jī)制原理和配置詳解

    Spring的懶加載機(jī)制原理和配置詳解

    這篇文章主要介紹了Spring的懶加載機(jī)制原理和配置詳解,Spring提供了懶加載機(jī)制,所謂的懶加載機(jī)制就是可以規(guī)定指定的bean不在啟動(dòng)時(shí)立即創(chuàng)建,而是在后續(xù)第一次用到時(shí)才創(chuàng)建,從而減輕在啟動(dòng)過(guò)程中對(duì)時(shí)間和內(nèi)存的消耗,需要的朋友可以參考下
    2023-10-10
  • spring boot 錯(cuò)誤頁(yè)面配置解決方案

    spring boot 錯(cuò)誤頁(yè)面配置解決方案

    這篇文章主要介紹了spring boot 錯(cuò)誤頁(yè)面配置解決方案,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-10-10
  • MyBatis執(zhí)行批處理操作的實(shí)現(xiàn)示例

    MyBatis執(zhí)行批處理操作的實(shí)現(xiàn)示例

    在MyBatis中,批處理操作是一種高效執(zhí)行多條語(yǔ)句的方式,下面就來(lái)介紹一下MyBatis執(zhí)行批處理操作的實(shí)現(xiàn)示例,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-07-07
  • Springboot+Vue+axios實(shí)現(xiàn)文章收藏功能

    Springboot+Vue+axios實(shí)現(xiàn)文章收藏功能

    這篇文章主要為大家詳細(xì)介紹了Springboot+Vue+axios實(shí)現(xiàn)文章收藏功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-08-08
  • Java中判斷字符串是否相等的實(shí)現(xiàn)

    Java中判斷字符串是否相等的實(shí)現(xiàn)

    這篇文章主要介紹了Java中判斷字符串是否相等的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • 解決Jackson反序列化map,set等復(fù)雜類型問(wèn)題

    解決Jackson反序列化map,set等復(fù)雜類型問(wèn)題

    這篇文章主要介紹了解決Jackson反序列化map,set等復(fù)雜類型問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-09-09
  • 一篇文章帶你入門Java變量及整形

    一篇文章帶你入門Java變量及整形

    這篇文章主要介紹了簡(jiǎn)單了解JAVA變量類型及代碼實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2021-08-08
  • 如何基于mybatis框架查詢數(shù)據(jù)庫(kù)表數(shù)據(jù)并打印

    如何基于mybatis框架查詢數(shù)據(jù)庫(kù)表數(shù)據(jù)并打印

    這篇文章主要介紹了如何基于mybatis框架查詢數(shù)據(jù)庫(kù)表數(shù)據(jù)并打印,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-11-11
  • java中幾種常見的排序算法總結(jié)

    java中幾種常見的排序算法總結(jié)

    大家好,本篇文章主要講的是java中幾種常見的排序算法總結(jié),感興趣的同學(xué)趕快來(lái)看一看吧,對(duì)你有幫助的話記得收藏一下
    2022-01-01

最新評(píng)論

云梦县| 海城市| 中方县| 客服| 通化市| 新平| 仙居县| 枝江市| 江华| 西乡县| 德惠市| 遵化市| 武陟县| 新兴县| 大渡口区| 射阳县| 温州市| 论坛| 扎囊县| 青海省| 巴马| 林州市| 连州市| 福州市| 广平县| 周至县| 浦城县| 昆山市| 伊川县| 延安市| 海城市| 延津县| 尼木县| 正蓝旗| 木里| 闽侯县| 佛冈县| 太白县| 富平县| 酉阳| 嘉善县|