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

Java鏈表使用解讀

 更新時(shí)間:2025年01月07日 08:44:31   作者:C6666888  
Java中的鏈表(LinkedList)是一種動態(tài)數(shù)據(jù)結(jié)構(gòu),由一系列節(jié)點(diǎn)組成,每個(gè)節(jié)點(diǎn)包含數(shù)據(jù)和指向下一個(gè)節(jié)點(diǎn)的引用,LinkedList實(shí)現(xiàn)了List和Deque接口,支持高效的插入和刪除操作,Java提供了.standard.util.LinkedList類來實(shí)現(xiàn)鏈表

Java鏈表使用

鏈表(Linked List)是一種線性數(shù)據(jù)結(jié)構(gòu),它由一系列節(jié)點(diǎn)組成,每個(gè)節(jié)點(diǎn)包含兩部分:一部分為用于儲存數(shù)據(jù)元素,另部分是一種引用(指針),指向下一個(gè)節(jié)點(diǎn)。

這種結(jié)構(gòu)允許動態(tài)地添加和刪除元素,而不需要像數(shù)組那種大規(guī)模的數(shù)據(jù)移動。

java鏈表的定義

在java中,鏈表可以通過自定義來實(shí)現(xiàn),也可以直接使用java.util.LinkedList 類。

LinkedList實(shí)現(xiàn)了接口,并且提供了雙向鏈接的功能,即每個(gè)節(jié)點(diǎn)不僅由指向下一個(gè)節(jié)點(diǎn)的引用,哈有指向前一個(gè)節(jié)點(diǎn)的引用。

這意味著LinkedList不僅可以作為列表使用,還可以作為棧或隊(duì)列使用,因?yàn)樗腔陔p向鏈表現(xiàn)實(shí)的。

每個(gè)節(jié)點(diǎn)通常包含兩個(gè)字段:

  • data:用于存儲實(shí)際的數(shù)據(jù)。
  • next:用于存儲向下一個(gè)節(jié)點(diǎn)的引用;如果是雙向鏈表,則還有一個(gè)prev字段用于存儲指向前一個(gè)節(jié)點(diǎn)的引用。

實(shí)例

在自定義單項(xiàng)鏈表是,可以這樣定義節(jié)點(diǎn)類:

class Node<E> {
    private E elem; // 數(shù)據(jù)域
    private Node<E> next; // 指針域

    public Node(E element, Node<E> next) {
        this.elem = element;
        this.next = next;
    }

    // Getter 和 Setter 方法...
}

對于LinkedList類而言,內(nèi)部由一個(gè)靜態(tài)內(nèi)部類Node,用來表示鏈表中的節(jié)點(diǎn)。此外,LinkedList還維護(hù)著幾個(gè)重要的成員變量,例如size(記錄鏈表大?。?、first(指向第一個(gè)節(jié)點(diǎn))和last(指向最后一個(gè)節(jié)點(diǎn))。這些變量是的可以在O(1)時(shí)間內(nèi)完成對鏈表頭部或尾部的操作。

Java鏈表的應(yīng)用

由于鏈表具有靈活的內(nèi)存管理和高效的插入\刪除操作特性,因此適用于多種引用場景:

  1. 頻繁插入和刪除:當(dāng)應(yīng)用程序需要頻繁地在集合中插入或刪除元素是,使用LinkedList會比ArrayList更有效率。這是因?yàn)?code>LinkedList不需要像ArrayList那樣在插入或刪除時(shí)調(diào)整其他元素的位置,從而避免了額外的時(shí)間開銷。
  2. 作為?;蜿?duì)列使用:LinkedList實(shí)現(xiàn)了Deque接口,所以它可以很方便地用作棧(通過addFirst()、removeFirst()等方法)或者隊(duì)列(通過addList()、removeFirst()等方法)。
  3. 緩存系統(tǒng):某些緩存算法(例如LRU,Least Recentiy Used)可能需要用到LinkedList來維護(hù)元素的順序。如,可以結(jié)合HashMapLinkedList實(shí)現(xiàn)一個(gè)簡單的LRu緩存。
  4. 多線程環(huán)境下的隊(duì)列:盡管LinkedList本身不是線程安全的,但在多線程環(huán)境中,可以通過適當(dāng)?shù)耐綑C(jī)制將其用作線程安全的隊(duì)列。
  5. 文件系統(tǒng)的實(shí)現(xiàn):鏈表的概念也被應(yīng)用與文件系統(tǒng)的設(shè)計(jì)中,比如FAT32、NTFS等格式的選擇實(shí)際上就是在選擇不同類型的鏈表空間規(guī)模及格式。
  6. 高級數(shù)據(jù)結(jié)構(gòu):除了上述應(yīng)用外,java鏈表還可以用于構(gòu)建更加復(fù)雜的結(jié)構(gòu),如雙端隊(duì)列(Deque)、循環(huán)鏈表(Circular Linked List)、跳表(Skip List)等。
  7. 鏈表合并:在排序算法中,如歸并排序、合并兩個(gè)有序鏈表也是常見的操作之一。
  8. 返回倒數(shù)第K個(gè)節(jié)點(diǎn):利用前后指針法可以高效地找到鏈表中的倒數(shù)第K個(gè)節(jié)點(diǎn)。

常用方法

方法描述
public boolean add(E e)鏈表末尾添加元素,返回是否成功,成功為 true,失敗為 false。
public void add(int index, E element)向指定位置插入元素。
public boolean addAll(Collection c)將一個(gè)集合的所有元素添加到鏈表后面,返回是否成功,成功為 true,失敗為 false。
public boolean addAll(int index, Collection c)將一個(gè)集合的所有元素添加到鏈表的指定位置后面,返回是否成功,成功為 true,失敗為 false。
public void addFirst(E e)元素添加到頭部。
public void addLast(E e)元素添加到尾部。
方法描述
public boolean add(E e)鏈表末尾添加元素,返回是否成功,成功為 true,失敗為 false。
public void add(int index, E element)向指定位置插入元素。
public boolean addAll(Collection c)將一個(gè)集合的所有元素添加到鏈表后面,返回是否成功,成功為 true,失敗為 false。
public boolean addAll(int index, Collection c)將一個(gè)集合的所有元素添加到鏈表的指定位置后面,返回是否成功,成功為 true,失敗為 false。
public void addFirst(E e)元素添加到頭部。
public void addLast(E e)元素添加到尾部。
public boolean offer(E e)向鏈表末尾添加元素,返回是否成功,成功為 true,失敗為 false。
public boolean offerFirst(E e)頭部插入元素,返回是否成功,成功為 true,失敗為 false。
public boolean offerLast(E e)尾部插入元素,返回是否成功,成功為 true,失敗為 false。
public void clear()清空鏈表。
public E removeFirst()刪除并返回第一個(gè)元素。
public E removeLast()刪除并返回最后一個(gè)元素。
public boolean remove(Object o)刪除某一元素,返回是否成功,成功為 true,失敗為 false。
public E remove(int index)刪除指定位置的元素。
public E poll()刪除并返回第一個(gè)元素。
public E remove()刪除并返回第一個(gè)元素。
public boolean contains(Object o)判斷是否含有某一元素
public E get(int index)返回指定位置的元素。
public E getFirst()返回第一個(gè)元素。
public E getLast()返回最后一個(gè)元素。
public int indexOf(Object o)查找指定元素從前往后第一次出現(xiàn)的索引。
public int lastIndexOf(Object o)查找指定元素最后一次出現(xiàn)的索引。
public E peek()返回第一個(gè)元素。
public E element()返回第一個(gè)元素。
public E peekFirst()返回頭部元素。
public E peekLast()返回尾部元素。
public E set(int index, E element)設(shè)置指定位置的元素。
public Object clone()克隆該列表。
public Iterator descendingIterator()返回倒序迭代器。
public int size()返回鏈表元素個(gè)數(shù)。
public ListIterator listIterator(int index)返回從指定位置開始到末尾的迭代器。
public Object[] toArray()返回一個(gè)由鏈表元素組成的數(shù)組。
public T[] toArray(T[] a)返回一個(gè)由鏈表元素轉(zhuǎn)換類型而成的數(shù)組。

上述列來自于菜鳥教程,下方為更多API方法

LinkedList (Java SE 11 & JDK 11 )

鏈表應(yīng)用定義總結(jié)

Java中的鏈表不僅是一個(gè)基礎(chǔ)的數(shù)據(jù)結(jié)構(gòu),而且因其靈活性和效率,在許多不同的編程場景中都有著廣泛的應(yīng)用。

無論是作為簡單的容器還是構(gòu)建更為復(fù)雜的數(shù)據(jù)結(jié)構(gòu)的基礎(chǔ)組件,鏈表都扮演著不可或缺的角色。

鏈表應(yīng)用實(shí)例

創(chuàng)建鏈表

首先,我們可以創(chuàng)建一個(gè)空的LinkedList實(shí)例:

import java.util.LinkedList;

public class LinkedListExample {
    public static void main(String[] args) {
        // 創(chuàng)建一個(gè)新的空LinkedList
        LinkedList<String> list = new LinkedList<>();
    }
}

這段代碼展示了如何導(dǎo)入java.util.LinkedList包,并創(chuàng)建了一個(gè)存儲字符串類型的LinkedList對象。

添加元素

接下來,我們可以在鏈表中添加元素。可以使用add()方法向鏈表末尾添加元素,或者使用addFirst()、addLast()分別向鏈表頭部或尾部插入元素。

// 向鏈表末尾添加元素
list.add("Apple");
list.add("Banana");

// 向鏈表頭部添加元素
list.addFirst("Orange");

// 向鏈表尾部添加元素
list.addLast("Grape");

這里展示了如何使用不同的方法向鏈表中添加元素。值得注意的是,addFirst()addLast()提供了更明確的操作意圖,而不僅僅是默認(rèn)地添加到鏈表末尾。

訪問元素

訪問鏈表中的元素可以通過索引進(jìn)行,也可以遍歷整個(gè)鏈表。對于前者,可以使用get()方法;對于后者,則可以使用增強(qiáng)型for循環(huán)或迭代器。

// 通過索引訪問元素
String element = list.get(1); // 獲取第二個(gè)元素

// 使用增強(qiáng)型for循環(huán)遍歷鏈表
for (String fruit : list) {
    System.out.println(fruit);
}

// 使用迭代器遍歷鏈表
Iterator<String> iterator = list.iterator();
while (iterator.hasNext()) {
    System.out.println(iterator.next());
}

這里介紹了兩種常見的遍歷方式:一種是直接通過索引獲取特定位置的元素,另一種則是利用迭代器逐一訪問每個(gè)元素。

刪除元素

刪除鏈表中的元素同樣支持多種方式,包括根據(jù)索引刪除、根據(jù)值刪除以及移除鏈表頭尾的元素。

// 根據(jù)索引刪除元素
list.remove(0); // 移除第一個(gè)元素

// 根據(jù)值刪除元素
list.remove("Banana"); // 移除值為"Banana"的第一個(gè)匹配項(xiàng)

// 移除鏈表頭部元素
list.removeFirst();

// 移除鏈表尾部元素
list.removeLast();

插入元素

除了簡單的添加和刪除外,還可以在鏈表的任意位置插入新元素。這通常涉及到先找到目標(biāo)位置,然后將新元素插入到該位置之前或之后。

// 在指定位置插入元素
list.add(1, "Peach"); // 在索引1處插入"Peach"

查找元素

如果想要檢查某個(gè)元素是否存在於鏈表中,可以使用contains()方法。

boolean exists = list.contains("Apple");
if (exists) {
    System.out.println("The list contains Apple.");
} else {
    System.out.println("The list does not contain Apple.");
}

這段代碼用來驗(yàn)證鏈表中是否包含特定元素,并輸出相應(yīng)的消息。

這些例子涵蓋了Java中LinkedList的基本用法,包括創(chuàng)建、添加、訪問、刪除、插入以及查找元素。

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 老生常談Java中List與ArrayList的區(qū)別

    老生常談Java中List與ArrayList的區(qū)別

    大家都知道List是接口,ArrayList是List接口的一個(gè)實(shí)現(xiàn)類,接下來通過本文給大家介紹Java中List與ArrayList的區(qū)別,需要的朋友可以參考下
    2022-08-08
  • Spring 4 支持的 Java 8 特性

    Spring 4 支持的 Java 8 特性

    Spring 框架 4 支持 Java 8 語言和 API 功能。在本文中,我們將重點(diǎn)放在 Spring 4 支持新的 Java 8 的功能。最重要的是 Lambda 表達(dá)式,方法引用,JSR-310的日期和時(shí)間,和可重復(fù)注釋。下面跟著小編一起來看下吧
    2017-03-03
  • SpringCloud實(shí)現(xiàn)SSO 單點(diǎn)登錄的示例代碼

    SpringCloud實(shí)現(xiàn)SSO 單點(diǎn)登錄的示例代碼

    作為分布式項(xiàng)目,單點(diǎn)登錄是必不可少的,這篇文章主要介紹了SpringCloud實(shí)現(xiàn)SSO 單點(diǎn)登錄的示例代碼,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2019-01-01
  • SpringBoot多數(shù)據(jù)源的兩種實(shí)現(xiàn)方式實(shí)例

    SpringBoot多數(shù)據(jù)源的兩種實(shí)現(xiàn)方式實(shí)例

    最近在項(xiàng)目開發(fā)中,需要為一個(gè)使用MySQL數(shù)據(jù)庫的SpringBoot項(xiàng)目,新添加一個(gè)PLSQL數(shù)據(jù)庫數(shù)據(jù)源,下面這篇文章主要給大家介紹了關(guān)于SpringBoot多數(shù)據(jù)源的兩種實(shí)現(xiàn)方式,需要的朋友可以參考下
    2022-04-04
  • ThreadLocal簡介_動力節(jié)點(diǎn)Java學(xué)院整理

    ThreadLocal簡介_動力節(jié)點(diǎn)Java學(xué)院整理

    這篇文章主要為大家詳細(xì)介紹了ThreadLocal簡介的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-08-08
  • Java:詳解Java中的異常

    Java:詳解Java中的異常

    這篇文章主要介紹了java中的異常,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2021-08-08
  • Spring6?的JdbcTemplate的JDBC模板類的使用介紹(最新推薦)

    Spring6?的JdbcTemplate的JDBC模板類的使用介紹(最新推薦)

    JdbcTemplate?是Spring?提供的一個(gè)JDBC模板類,是對JDBC的封裝,簡化JDBC代碼,當(dāng)然,你也可以不用,可以讓Spring集成其它的ORM框架,這篇文章主要介紹了Spring6?的JdbcTemplate的JDBC模板類的詳細(xì)使用說明,需要的朋友可以參考下
    2024-05-05
  • java中注解的原理解析

    java中注解的原理解析

    這篇文章主要介紹了java中注解的原理解析,java 注解又稱 Java 標(biāo)注,是 JDK5.0 引入的一種注釋機(jī)制,可以理解為為某個(gè)東西,打個(gè)標(biāo)記的記號,等要使用這個(gè)注解時(shí),可以通過反射獲取標(biāo)注里面的內(nèi)容,需要的朋友可以參考下
    2023-10-10
  • Servlet關(guān)于RequestDispatcher的原理詳解

    Servlet關(guān)于RequestDispatcher的原理詳解

    這篇文章主要介紹了Servlet關(guān)于RequestDispatcher的原理詳解,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-11-11
  • Maven將Jar包打入本地倉庫的實(shí)現(xiàn)

    Maven將Jar包打入本地倉庫的實(shí)現(xiàn)

    項(xiàng)目需要用到一個(gè)Jar包,不能從遠(yuǎn)程倉庫拉取,只有一個(gè)Jar包,所以需要將Jar包打入到本地倉庫才能引入項(xiàng)目,本文主要介紹了Maven將Jar包打入本地倉庫的實(shí)現(xiàn),感興趣的可以了解一下
    2023-12-12

最新評論