1. 程式人生 > 程式設計 >Java實現連結串列中元素的獲取、查詢和修改方法詳解

Java實現連結串列中元素的獲取、查詢和修改方法詳解

本文例項講述了Java實現連結串列中元素的獲取、查詢和修改方法。分享給大家供大家參考,具體如下:

本節是在上一小節Java連結串列中新增元素的基礎上繼續完善我們的連結串列相關方法的編寫,在本節中我們著重對如何獲取連結串列中元素、查詢元素以及修改元素進行學習。

一、獲取元素

1.關於獲取連結串列中元素的方法的分析

由於我們使用了虛擬頭結點,而我們每次都需要從第一個真實節點開始,因此需要首先得到虛擬頭結點的下一個節點是誰,然後在此基礎上進行遍歷工作,相關程式碼如下:

 //獲取連結串列的第index(0-based)個位置的元素  (實際不常用,練習用)
  public E get(int index) {
    //合法性判斷
    if (index < 0 || index >= size) {
      throw new IllegalArgumentException("Get failed,Illegal index");
    }

    Node<E> cur = dummyHead.next;
    for (int i = 0; i < index; i++) {
      cur = cur.next;
    }
    return cur.e;
  }

2.獲得連結串列的第一個元素

對於該方法則是依靠在get()方法的。

 //獲得連結串列的第一個元素
  public E getFirst() {
    return get(0);
  }

3.獲得連結串列的最後一個元素

對於該方法頁是依靠在get()方法的。

 //獲得連結串列的最後一個元素
  public E getLast() {
    return get(size - 1);
  }

二、修改連結串列元素

由於我們使用了虛擬頭結點,而我們每次都需要從第一個真實節點開始,因此需要首先得到虛擬頭結點的下一個節點是誰,然後在此基礎上進行遍歷工作,相關程式碼如下:

  //修改連結串列的第index(0-based)個位置的元素  (實際不常用,練習用)
  public void set(int index,E e) {
    //合法性判斷
    if (index < 0 || index >= size) {
      throw new IllegalArgumentException("update failed,Illegal index");
    }

    Node<E> cur = dummyHead.next;
    for (int i = 0; i < index; i++) {
      cur = cur.next;
    }
    cur.e = e;
  }

三、判斷是否有元素e

由於我們使用了虛擬頭結點,而我們每次都需要從第一個真實節點開始,因此需要首先得到虛擬頭結點的下一個節點是誰,然後判斷給定的元素值與連結串列中的元素值內容是否相等(equals()方法),若相等則返回true,否則返回false。

 //查詢連結串列中是否有元素e
  public boolean contains(E e) {
    Node<E> cur = dummyHead.next;
    while (cur != null) {
      if (cur.e.equals(e)) {
        return true;
      }
      cur = cur.next;
    }
    return false;
  }

四、toString()方法的重寫

為了在輸出該連結串列物件時可以檢視相關自定義的資訊,我們對toString()進行重寫改造。

//重寫object類,便於測試
  @Override
  public String toString() {
    StringBuilder res = new StringBuilder();
    Node<E> cur = dummyHead.next;
    while (cur != null) {
      res.append(cur + "->");
      cur = cur.next;
    }

    res.append("NULL");

    return res.toString();
  }

此時該方法等同於

 //重寫object類,便於測試
  @Override
  public String toString() {
    StringBuilder res = new StringBuilder();

    for (Node<E> cur = dummyHead.next; cur != null; cur = cur.next) {
      res.append(cur + "->");
    }
    res.append("NULL");

    return res.toString();
  }

五、測試

新建一個main函式,填寫相關測試程式碼如下:

package LinkedList;

public class TestMain {
  public static void main(String[] args) {
    LinkedList<Integer> linkedList = new LinkedList<Integer>();

    System.out.println("============在連結串列頭部新增============");
    for (int i = 0; i < 5; i++) {
      linkedList.addFirst(i);
      System.out.println(linkedList);
    }


    System.out.println("============修改連結串列============");
    linkedList.set(2,666);
    System.out.println(linkedList);
  }
}

結果為:

Java實現連結串列中元素的獲取、查詢和修改方法詳解

結果分析:由於是在連結串列頭部新增元素,故最終顯示結果為從右到左,最右為NULL(也就是最後一個節點)。

更多關於java演算法相關內容感興趣的讀者可檢視本站專題:《Java資料結構與演算法教程》、《Java操作DOM節點技巧總結》、《Java檔案與目錄操作技巧彙總》和《Java快取操作技巧彙總》

希望本文所述對大家java程式設計有所幫助。