【本節目标】
通過閱讀本節内容,你将了解到連結清單這一概念,知曉在開發過程中可以自己來編寫資料結構來解決各種複雜的資料要求,學會定義連結清單結構,并實作簡單的存取代碼。
連結清單的本質是一個動态的數組對象,它可以實作若幹個對象的存儲。
連結清單的基本定義
在實際的開發之中對象數組是一項非常實用的技術,利用其可以描述出“多”方的概念,例如:一個人有多本書,那麼在人的類裡面一定要提供有一個對象數組儲存書的資訊,但是傳統的對象數組依賴于數組的概念,是以數組裡面最大的缺點在于:長度是固定的,正是因為如此是以在實際的開發之中,傳統的數組應用是非常有限的。(數組的接收、數組的循環處理),如果要想進行靈活的資料儲存,那麼就必須自己來實作結構。

圖一 連結清單結構
傳統對象數組的開發操作依賴于腳标(索引)的控制,如果要想實作内容的動态維護,那麼難度太高了,而且複雜度攀升,是以現在就可以發現,對于一成不變的資料可以使用對象數組來實作,但是對于可能随時變化的資料而言,就必須實作一個可以動态擴充的對象數組。
所謂的連結清單實質性的本質是利用引用的邏輯關系來實作類似于數組的資料處理操作。以一種儲存“多”方資料的形式實作數組類似的功能。
圖二 類似火車車廂
通過分析可以發現,如果要想實作連結清單處理,那麼就需要有一個公共的結構,這個結構可以實作資料的儲存以及下一個連接配接的指向。為了描述這樣一個邏輯,可以把每一個存儲了解為一個節點,可以把每一個存儲了解為一個節點,是以此時應該準備出一個節點類,但是這個節點類中可以儲存各種資料類型的資料。
圖三 連結清單實作邏輯
雖然已經清楚了需要通過Node節點來進行資料的儲存,但是畢竟這裡面需要牽扯到節點的引用處理關系,這是由使用者控制嗎?
範例:直接操作Node很麻煩
class Node<E> {
private E data ;
private Node next ;
public Node(E data) {
this.data = data ;
}
public E getData() {
return this.data ;
}
public void setNext(Node<E> next) {
this.next = next ;
}
public Node getNext() {
return this.next ;
}
}
public class LinkDemo{
public static void main(String args[]) {
Node<String> n1 = new Node<String>("火車頭") ;
Node<String> n2 = new Node<String>("車廂一") ;
Node<String> n3 = new Node<String>("車廂二") ;
Node<String> n4 = new Node<String>("車廂三") ;
Node<String> n5 = new Node<String>("車廂四") ;
n1.setNext(n2) ;
n2.setNext(n3) ;
n3.setNext(n4) ;
n4.setNext(n5) ;
print(n1) ;
}
public static void print(Node<?> node) {
if (node != null) { //有節點
System.out.println(node.getData()) ;
print(node.getNext()) ; //遞歸調用
}
}
}
執行結果:
火車頭
車廂一
車廂二
車廂三
車廂四
這樣肯定不可能,是以應該有一個專門的類來進行節點的引用關系的配置。因為真實的使用者實際上關心的隻是資料的存儲與擷取,是以現在應該對Node類進行包裝處理。
圖四 連結清單結構拓展
想學習更多的Java的課程嗎?從小白到大神,從入門到精通,更多精彩不容錯過!免費為您提供更多的學習資源。
本内容視訊來源于
阿裡雲大學 下一篇:要操作先有數-教你增加連結清單資料 | 帶你學《Java面向對象程式設計》之九十 更多Java面向對象程式設計文章檢視此處