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

JAVA中ArrayList與LinkedList二者特點(diǎn)與區(qū)別總結(jié)

 更新時(shí)間:2025年07月01日 10:42:35   作者:猿究院--馮10  
ArrayList和LinkedList是Java集合框架中兩種常用的List實(shí)現(xiàn),它們?cè)诓樵冃噬洗嬖陲@著差異,這篇文章主要介紹了JAVA中ArrayList與LinkedList二者特點(diǎn)與區(qū)別的相關(guān)資料,需要的朋友可以參考下

前言

本文分別概述ArrayList和LinkList并總結(jié)二者特點(diǎn)與區(qū)別。

1.‌什么是ArrayList

‌ArrayList是Java集合框架中的一個(gè)類,它實(shí)現(xiàn)了List接口,基于動(dòng)態(tài)數(shù)組實(shí)現(xiàn),提供了動(dòng)態(tài)擴(kuò)展容量的功能。

動(dòng)態(tài)大小: 與 Java 中的數(shù)組不同,ArrayList 在添加或刪除元素時(shí)可以動(dòng)態(tài)調(diào)整大小。

泛型支持: ArrayList 支持泛型,這意味著您可以指定它將保存的元素類型。例如,您可以創(chuàng)建一個(gè)包含字符串、整數(shù)或自定義對(duì)象的 ArrayList。

從零開(kāi)始的索引: ArrayList 中的元素按從零開(kāi)始的索引存儲(chǔ),這意味著第一個(gè)元素位于索引 0,第二個(gè)位于索引 1,依此類推。

ArrayList提供了三種構(gòu)造方法:

無(wú)參構(gòu)造方法‌:創(chuàng)建一個(gè)初始容量為10的空列表。

ArrayList<E> list = new ArrayList<>();

源碼: 

指定初始容量的構(gòu)造方法‌:創(chuàng)建一個(gè)具有指定初始容量的空列表。

ArrayList<E> list = new ArrayList<>(initialCapacity);

源碼: 

從集合構(gòu)造(使用Collection構(gòu)造方法:)‌:創(chuàng)建一個(gè)包含指定集合元素的列表‌

ArrayList<E> list = new ArrayList<>(Collection<? extends E> c);

Collection<? extends E> c 是一個(gè)泛型表達(dá)式,它表示一個(gè)集合,該集合包含的元素類型是 E 或者是 E 的某個(gè)子類型(或子類)。在這個(gè)表達(dá)式中,? extends E 表示任何是 E 類型或其子類型的通配符。這允許在集合中包含 E 或 E 的子類的元素。 

源碼:

代碼演示:

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
 
public class Demo01 {
    public static void main(String[] args) {
        // 無(wú)參構(gòu)造方法
        ArrayList<String> emptyList = new ArrayList<>();
 
        // 帶初始容量的構(gòu)造方法
        ArrayList<Integer> intListWithCapacity = new ArrayList<>(10);
 
        // 使用Collection構(gòu)造方法
        ArrayList<String> list = Arrays.asList("小新","小葵");
        ArrayList<String> arrayListFromCollection = new ArrayList<>(list);
 
        // 輸出結(jié)果
        System.out.println("無(wú)參構(gòu)造集合: " + emptyList);
        System.out.println("帶初始容量的構(gòu)造集合: " + intListWithCapacity);
        System.out.println("使用Collection構(gòu)造集合: " + arrayListFromCollection);
    }
}

運(yùn)行結(jié)果:

ArrayList核心方法

添加元素:

add(E element): 將元素添加到列表的末尾。
add(int index, E element): 在指定的索引位置插入元素。
獲取元素:

get(int index): 獲取指定索引位置的元素。
修改元素:

set(int index, E element): 替換指定索引位置的元素。
刪除元素:

remove(Object o): 從列表中刪除指定的元素。
remove(int index): 刪除指定索引位置的元素。
判斷是否包含元素:

contains(Object o): 判斷列表是否包含指定的元素。
獲取列表大小:

size(): 返回列表中的元素?cái)?shù)。
判斷列表是否為空:

isEmpty(): 如果列表不包含任何元素,則返回 true。
清空列表:

clear(): 從列表中移除所有元素。
獲取元素下標(biāo):

indexOf(Object o): 返回指定元素第一次出現(xiàn)的索引;如果列表不包含該元素,則返回 -1。
lastIndexOf(Object o): 返回指定元素最后一次出現(xiàn)的索引;如果列表不包含該元素,則返回 -1。
轉(zhuǎn)換為數(shù)組:

toArray(): 將列表轉(zhuǎn)換為數(shù)組。
截取集合元素:subList(int fromIndex, int toIndex): 返回列表的子列表,[ fromIndex, toIndex)。

判斷內(nèi)容是否相等:

equals(Object o)

代碼演示:

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

public class Demo02 {
    public static void main(String[] args) {
        ArrayList<String> list = new ArrayList<>();
        List<String> list1 = Arrays.asList("李白","高適","杜甫","杜甫","白居易","王維");
        list.addAll(list);
        System.out.println("list集合中的元素為"+list);

        //int size()
        System.out.println("集合的元素的個(gè)數(shù)為:"+list.size());
        //E get(int index)獲取下標(biāo)中的元素
        System.out.println("首元素為:"+list.get(0));
        System.out.println("尾元素為:"+list.get(list.size()-1));
        //int intdexOf(Object C)
        System.out.println("元素杜甫的下標(biāo)位置為:"+list.indexOf("杜甫"));
        //boolean contains(Object c)
        System.out.println("元素杜甫是否存在:"+list.contains("杜甫"));
        //boolean isEmpty
        System.out.println("集合是否為空:"+list.isEmpty());
        //List<E> subList(int fromIndex,int toIndex)
        List<String> subList = list.subList(0,list.size());
        System.out.println("截取的集合元素為:"+subList);
        //boolean equals(Object o)
        System.out.println("內(nèi)容是否相等"+list.equals(subList));
    }
}

運(yùn)行結(jié)果:

2.什么是Linklist?

LinkList是一個(gè)雙向鏈表,它通過(guò)節(jié)點(diǎn)之間的鏈接來(lái)存儲(chǔ)數(shù)據(jù)。每個(gè)節(jié)點(diǎn)包含數(shù)據(jù)和指向前后節(jié)點(diǎn)的引用。這種結(jié)構(gòu)使得LinkedList適合于頻繁的插入和刪除操作。

內(nèi)部結(jié)構(gòu)LinkedList的內(nèi)部結(jié)構(gòu)包括節(jié)點(diǎn)(Node)和鏈表(LinkedList類)。每個(gè)節(jié)點(diǎn)包含數(shù)據(jù)、前一個(gè)節(jié)點(diǎn)的引用和后一個(gè)節(jié)點(diǎn)的引用。這種結(jié)構(gòu)使得LinkedList既可以從頭部也可以從尾部進(jìn)行快速的插入和刪除操作‌。

LinkList提供兩種構(gòu)造方法:

無(wú)參構(gòu)造方法:

LinkedList<E> list = new LinkedList<>();

源碼:

從集合構(gòu)造(使用Collection構(gòu)造方法:)‌:

LinkList<E> list = new LinkList<>(Collection<? extends E> c);

LinkList核心方法

代碼示例:

public class Demo07 {
    public static void main(String[] args) {
        //創(chuàng)建list1
        LinkedList<String> list1 = new LinkedList<>();
        //添加元素
        list1.add("小白");
        list1.add("小葵");

        //add(int index,E element) 在此列表中的指定位置插入指定的元素。
        list1.add(0,"小新");

        boolean addAll(int index,Collection<?extendsE>c)添加一個(gè)單列集合,默認(rèn)添加到集合的尾部,如果傳入index,則放入指定位置
        List<String> c1 = Arrays.asList("風(fēng)間","妮妮","阿呆");
        list1.addAll(1,c1);

        //void addFirst(E,e)添加到列表的頭部
        list1.addFirst("蜘蛛俠");
        //void addLast(E e)添加到列表的尾部
        list1.addLast("黑寡婦");
        System.out.println("集合的內(nèi)容為:"+list1);

        //查看
        String item1 = list1.get(0);
        System.out.println("首元素為:"+item1);
        System.out.println("首元素為:"+list1.getFirst());
        System.out.println("尾元素為:"+list1.getLast());
        System.out.println("元素個(gè)數(shù)為:"+list1.size());

        //修改set(int index,Eelement):用指定的元素替代此列表中指定位置上的元素。
        int index = list1.indexOf("小新");
        list1.set(index,"野原新之助");
        System.out.println("修改后的集合為:"+list1);

        //刪除方法
        boolean b1 = list1.remove("小新");
        System.out.println("刪除是否成功:"+b1);
        System.out.println("修改后的集合為:"+list1);
        String item = list1.remove(2);
        System.out.println("刪除元素為:"+item);
        System.out.println("修改后的集合為:"+list1);
        System.out.println("刪除的首元素為:"+list1.removeFirst());
        System.out.println("刪除的尾元素為:"+list1.removeLast());
        System.out.println("默認(rèn)刪除首元素:"+list1.remove());

    }
}

運(yùn)行結(jié)果:

3.ArrayList和LinkedList的區(qū)別:

‌ArrayList和LinkedList的主要區(qū)別在于它們的底層數(shù)據(jù)結(jié)構(gòu)、性能特點(diǎn)以及適用場(chǎng)景。

圖解:

底層數(shù)據(jù)結(jié)構(gòu)

  • ArrayList‌:基于動(dòng)態(tài)數(shù)組實(shí)現(xiàn),維護(hù)一個(gè)Object類型的數(shù)組來(lái)存儲(chǔ)元素,可以根據(jù)需要自動(dòng)擴(kuò)展容量。當(dāng)元素?cái)?shù)量超過(guò)當(dāng)前容量時(shí),ArrayList會(huì)進(jìn)行擴(kuò)容操作,通常是將現(xiàn)有元素復(fù)制到一個(gè)新的更大數(shù)組中‌。
  • LinkedList‌:基于雙向鏈表實(shí)現(xiàn),每個(gè)節(jié)點(diǎn)包含存儲(chǔ)的元素、指向前一個(gè)節(jié)點(diǎn)的引用和指向下一個(gè)節(jié)點(diǎn)的引用。LinkedList不需要預(yù)先分配固定大小的空間,可以在鏈表的頭部或尾部靈活地添加或刪除元素‌。

性能特點(diǎn)

------------------------------------------------------------------------------------------------------------------------------
查詢性能‌:‌ArrayList‌:通過(guò)索引直接訪問(wèn)元素,查詢速度非??欤瑫r(shí)間復(fù)雜度為O(1)。適合需要頻繁訪問(wèn)特定位置數(shù)據(jù)的場(chǎng)景‌。

LinkedList‌:需要遍歷鏈表來(lái)找到指定索引的元素,查詢速度較慢,時(shí)間復(fù)雜度為O(n)‌。

‌添加和刪除性能‌:‌ArrayList‌:在列表中間插入或刪除元素時(shí),需要移動(dòng)后續(xù)的所有元素,時(shí)間復(fù)雜度為O(n)。在列表末尾插入或刪除元素的時(shí)間復(fù)雜度為O(1),但擴(kuò)容時(shí)需要復(fù)制元素,時(shí)間復(fù)雜度較高‌。

‌LinkedList‌:在頭部或尾部添加或刪除元素時(shí),只需更改指針引用,時(shí)間復(fù)雜度為O(1)。在中間插入或刪除元素時(shí),時(shí)間復(fù)雜度為O(n),但如果已知節(jié)點(diǎn)位置,操作時(shí)間復(fù)雜度為O(1)‌。

適用場(chǎng)景‌ArrayList‌:適合需要頻繁訪問(wèn)特定位置數(shù)據(jù)的場(chǎng)景,如排行榜、購(gòu)物車列表等。由于其在中間插入或刪除元素的性能較差,更適合查詢多、增刪少的場(chǎng)景‌。

‌LinkedList‌:適合需要頻繁在列表頭部或尾部進(jìn)行插入和刪除操作的場(chǎng)景,如鏈表操作、隊(duì)列等。由于其內(nèi)部結(jié)構(gòu)特點(diǎn),更適合動(dòng)態(tài)增刪操作‌。

總結(jié)

到此這篇關(guān)于JAVA中ArrayList與LinkedList二者特點(diǎn)與區(qū)別總結(jié)的文章就介紹到這了,更多相關(guān)JAVA ArrayList與LinkedList內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java定時(shí)器通信協(xié)議管理模塊Timer詳解

    Java定時(shí)器通信協(xié)議管理模塊Timer詳解

    這篇文章主要介紹了Java定時(shí)器通信協(xié)議管理模塊Timer,?Timer一般指定時(shí)器(通信協(xié)議管理模塊)人類最早使用的定時(shí)工具是沙漏或水漏,但在鐘表誕生發(fā)展成熟之后,人們開(kāi)始嘗試使用這種全新的計(jì)時(shí)工具來(lái)改進(jìn)定時(shí)器,達(dá)到準(zhǔn)確控制時(shí)間的目的
    2022-08-08
  • Java直接插入排序算法實(shí)現(xiàn)

    Java直接插入排序算法實(shí)現(xiàn)

    這篇文章主要介紹了Java直接插入排序算法實(shí)現(xiàn),有需要的朋友可以參考一下
    2014-01-01
  • java實(shí)現(xiàn)動(dòng)態(tài)編譯并動(dòng)態(tài)加載

    java實(shí)現(xiàn)動(dòng)態(tài)編譯并動(dòng)態(tài)加載

    這篇文章主要介紹了java實(shí)現(xiàn)動(dòng)態(tài)編譯并動(dòng)態(tài)加載,需要的朋友可以參考下
    2021-04-04
  • MyBatis深入解讀動(dòng)態(tài)SQL的實(shí)現(xiàn)

    MyBatis深入解讀動(dòng)態(tài)SQL的實(shí)現(xiàn)

    動(dòng)態(tài) SQL 是 MyBatis 的強(qiáng)大特性之一。如果你使用過(guò) JDBC 或其它類似的框架,你應(yīng)該能理解根據(jù)不同條件拼接 SQL 語(yǔ)句有多痛苦,例如拼接時(shí)要確保不能忘記添加必要的空格,還要注意去掉列表最后一個(gè)列名的逗號(hào)。利用動(dòng)態(tài) SQL,可以徹底擺脫這種痛苦
    2022-04-04
  • java中random的用法小結(jié)

    java中random的用法小結(jié)

    這篇文章主要介紹了java中random的用法詳解,主要包括java.lang.Math.random()方法的用法及java.util.Random類用法,本文通過(guò)示例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2022-06-06
  • SpringBoot使用@EnableAutoConfiguration實(shí)現(xiàn)自動(dòng)配置詳解

    SpringBoot使用@EnableAutoConfiguration實(shí)現(xiàn)自動(dòng)配置詳解

    你有想過(guò)SpringBoot為什么能夠自動(dòng)的幫我們創(chuàng)建一個(gè)Bean對(duì)象么?或許在我們使用的時(shí)候只需要在自己自定義的配置文件中加入@Bean對(duì)象就可以,但SpringBoot是如何來(lái)創(chuàng)建的呢
    2022-08-08
  • 淺談Java中的private方法是否可以被代理

    淺談Java中的private方法是否可以被代理

    這篇文章主要介紹了淺談Java中的private方法是否可以被代理,在?Java?8之前,接口可以有常量變量和抽象方法,我們不能在接口中提供方法實(shí)現(xiàn),如果我們要提供抽象方法和非抽象方法(方法與實(shí)現(xiàn))的組合,那么我們就得使用抽象類,需要的朋友可以參考下
    2023-12-12
  • JAVA簡(jiǎn)單鏈接Oracle數(shù)據(jù)庫(kù) 注冊(cè)和登陸功能的實(shí)現(xiàn)代碼

    JAVA簡(jiǎn)單鏈接Oracle數(shù)據(jù)庫(kù) 注冊(cè)和登陸功能的實(shí)現(xiàn)代碼

    這篇文章主要介紹了JAVA鏈接Oracle并實(shí)現(xiàn)注冊(cè)與登錄功能的代碼實(shí)例,有需要的朋友可以參考一下
    2014-01-01
  • Java字符串操作的四種正確姿勢(shì)與常用模板

    Java字符串操作的四種正確姿勢(shì)與常用模板

    在Java編程中,字符串(String)是一個(gè)非常常見(jiàn)的數(shù)據(jù)類型,用于存儲(chǔ)文本信息,無(wú)論是處理用戶輸入、讀取文件內(nèi)容還是與外部系統(tǒng)進(jìn)行通信,字符串都扮演著重要的角色,這篇文章主要介紹了Java字符串操作的四種正確姿勢(shì)與常用模板的相關(guān)資料,需要的朋友可以參考下
    2026-03-03
  • spring boot項(xiàng)目生成docker鏡像并完成容器部署的方法步驟

    spring boot項(xiàng)目生成docker鏡像并完成容器部署的方法步驟

    這篇文章主要介紹了spring boot項(xiàng)目生成docker鏡像并完成容器部署的方法步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-10-10

最新評(píng)論

轮台县| 永德县| 元阳县| 西吉县| 翁牛特旗| 望城县| 寿光市| 新津县| 根河市| 太和县| 东乡| 永福县| 丰都县| 镇雄县| 清丰县| 桐城市| 广饶县| 沽源县| 陕西省| 化隆| 泗水县| 黔东| 公安县| 岳普湖县| 大丰市| 镶黄旗| 宣化县| 启东市| 宝兴县| 凤城市| 元江| 龙陵县| 常熟市| 龙里县| 栾川县| 车致| 庆城县| 息烽县| 秦皇岛市| 江川县| 行唐县|