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

JAVA中ArrayList與LinkedList二者特點與區(qū)別總結

 更新時間:2025年07月01日 10:42:35   作者:猿究院--馮10  
ArrayList和LinkedList是Java集合框架中兩種常用的List實現(xiàn),它們在查詢效率上存在顯著差異,這篇文章主要介紹了JAVA中ArrayList與LinkedList二者特點與區(qū)別的相關資料,需要的朋友可以參考下

前言

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

1.‌什么是ArrayList

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

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

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

從零開始的索引: ArrayList 中的元素按從零開始的索引存儲,這意味著第一個元素位于索引 0,第二個位于索引 1,依此類推。

ArrayList提供了三種構造方法:

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

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

源碼: 

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

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

源碼: 

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

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

Collection<? extends E> c 是一個泛型表達式,它表示一個集合,該集合包含的元素類型是 E 或者是 E 的某個子類型(或子類)。在這個表達式中,? 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) {
        // 無參構造方法
        ArrayList<String> emptyList = new ArrayList<>();
 
        // 帶初始容量的構造方法
        ArrayList<Integer> intListWithCapacity = new ArrayList<>(10);
 
        // 使用Collection構造方法
        ArrayList<String> list = Arrays.asList("小新","小葵");
        ArrayList<String> arrayListFromCollection = new ArrayList<>(list);
 
        // 輸出結果
        System.out.println("無參構造集合: " + emptyList);
        System.out.println("帶初始容量的構造集合: " + intListWithCapacity);
        System.out.println("使用Collection構造集合: " + arrayListFromCollection);
    }
}

運行結果:

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): 判斷列表是否包含指定的元素。
獲取列表大?。?/strong>

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

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

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

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

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

判斷內容是否相等:

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("集合的元素的個數(shù)為:"+list.size());
        //E get(int index)獲取下標中的元素
        System.out.println("首元素為:"+list.get(0));
        System.out.println("尾元素為:"+list.get(list.size()-1));
        //int intdexOf(Object C)
        System.out.println("元素杜甫的下標位置為:"+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("內容是否相等"+list.equals(subList));
    }
}

運行結果:

2.什么是Linklist?

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

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

LinkList提供兩種構造方法:

無參構造方法:

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

源碼:

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

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)添加一個單列集合,默認添加到集合的尾部,如果傳入index,則放入指定位置
        List<String> c1 = Arrays.asList("風間","妮妮","阿呆");
        list1.addAll(1,c1);

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

        //查看
        String item1 = list1.get(0);
        System.out.println("首元素為:"+item1);
        System.out.println("首元素為:"+list1.getFirst());
        System.out.println("尾元素為:"+list1.getLast());
        System.out.println("元素個數(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("默認刪除首元素:"+list1.remove());

    }
}

運行結果:

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

‌ArrayList和LinkedList的主要區(qū)別在于它們的底層數(shù)據(jù)結構、性能特點以及適用場景。

圖解:

底層數(shù)據(jù)結構

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

性能特點

------------------------------------------------------------------------------------------------------------------------------
查詢性能‌:‌ArrayList‌:通過索引直接訪問元素,查詢速度非???,時間復雜度為O(1)。適合需要頻繁訪問特定位置數(shù)據(jù)的場景‌。

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

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

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

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

‌LinkedList‌:適合需要頻繁在列表頭部或尾部進行插入和刪除操作的場景,如鏈表操作、隊列等。由于其內部結構特點,更適合動態(tài)增刪操作‌。

總結

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

相關文章

  • SpringBoot使用Minio進行文件存儲的實現(xiàn)

    SpringBoot使用Minio進行文件存儲的實現(xiàn)

    本文主要介紹了SpringBoot使用Minio進行文件存儲的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-07-07
  • mybatis連接數(shù)據(jù)庫實現(xiàn)雙表查詢

    mybatis連接數(shù)據(jù)庫實現(xiàn)雙表查詢

    本文主要介紹了mybatis連接數(shù)據(jù)庫實現(xiàn)雙表查詢,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2024-09-09
  • 深入理解spring boot 監(jiān)控

    深入理解spring boot 監(jiān)控

    今天通過本文給大家介紹關于spring boot 監(jiān)控的相關知識,引入jar包的實例代碼文中也給大家詳細介紹,對spring boot 監(jiān)控相關知識感興趣的朋友一起看看吧
    2021-10-10
  • java 實現(xiàn)通過 post 方式提交json參數(shù)操作

    java 實現(xiàn)通過 post 方式提交json參數(shù)操作

    這篇文章主要介紹了java 實現(xiàn)通過 post 方式提交json參數(shù)操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-09-09
  • 解決SpringBoot在IDEA中熱部署失效問題

    解決SpringBoot在IDEA中熱部署失效問題

    熱部署是指程序運行過程中實時更新或替換其組件的技術,即項目正在啟動中,修改了配置文件中某個值或者添加了某個方法或者修改了某個方法參數(shù),本文給大家介紹了解決SpringBoot在IDEA中熱部署失效問題,需要的朋友可以參考下
    2024-01-01
  • spring-boot-maven-plugin未指定版本導致的編譯錯誤問題

    spring-boot-maven-plugin未指定版本導致的編譯錯誤問題

    這篇文章主要介紹了spring-boot-maven-plugin未指定版本導致的編譯錯誤問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-04-04
  • Java實現(xiàn)快速排序算法可視化的示例代碼

    Java實現(xiàn)快速排序算法可視化的示例代碼

    快速排序算法通過多次比較和交換來實現(xiàn)排序,是對冒泡排序算法的一種改進。本文將用Java語言實現(xiàn)快速排序算法并進行可視化,感興趣的可以了解一下
    2022-08-08
  • Java布隆過濾器的原理和實現(xiàn)分析

    Java布隆過濾器的原理和實現(xiàn)分析

    數(shù)組、鏈表、樹等數(shù)據(jù)結構會存儲元素的內容,一旦數(shù)據(jù)量過大,消耗的內存也會呈現(xiàn)線性增長所以布隆過濾器是為了解決數(shù)據(jù)量大的一種數(shù)據(jù)結構。本文就來和大家詳細說說布隆過濾器的原理和實現(xiàn),感興趣的可以了解一下
    2022-10-10
  • 使用新版Maven-mvnd快速構建項目

    使用新版Maven-mvnd快速構建項目

    本文主要介紹了使用新版Maven-mvnd來快速構建項目,相比于Maven,mvnd可以顯著提高構建速度,文中通過示例代碼介紹的非常詳細,需要的朋友們下面隨著小編來一起學習學習吧
    2025-01-01
  • SpringBoot中的聲明式事務+切面事務+編程式事務詳解

    SpringBoot中的聲明式事務+切面事務+編程式事務詳解

    這篇文章主要介紹了SpringBoot中的聲明式事務+切面事務+編程式事務詳解,事務管理對于企業(yè)應用來說是至關重要的,當出現(xiàn)異常情況時,它也可以保證數(shù)據(jù)的一致性,需要的朋友可以參考下
    2023-08-08

最新評論