【本節目标】
通過閱讀本節内容,你将掌握實作添加連結清單資料的方法,對連結清單中Node節點應該具備的基本操作有進一步的了解。
資料儲存:public void add(E e)
通過之前的分析可以發現在進行連結清單操作的過程之中為了避免轉型的異常應該使用的泛型,同時也應該設計一個連結清單的标準接口,同時具體實作該接口的時候還應該通過Node類做出節點的關系描述。
範例:基本結構
interface ILink<E> { //設定泛型避免安全隐患
public void add(E e) ;
}
class LinkImpl<E> implements ILink<E> {
private class Node { //儲存節點的資料關系
private E data ; //儲存資料
private Node next ; //儲存下一個引用
public Node(E data) { //有資料的情況下才有意義
this.data = data ;
}
}
//------------以下為Link類中定義的結構-----------------
}
在現在所定義的Node類之中并沒有出現有setter與getter方法,是因為内部類中的私有屬性也友善外部類直接通路。
範例:實作資料增加
interface ILink<E> { //設定泛型避免安全隐患
public void add(E e) ;
}
class LinkImpl<E> implements ILink<E> {
private class Node { //儲存節點的資料關系
private E data ; //儲存資料
private Node next ; //儲存下一個引用
public Node(E data) { //有資料的情況下才有意義
this.data = data ;
}
//第一次調用:this = LinkImpl.root ;
//第二次調用:this = LinkImpl.root.next ;
//第三次調用:this = LinkImpl.root.next.next ;
public void addNode(Node newNode){ //儲存新的Node資料
if (this.next == null) { //目前節點的下一個節點為null
this.next = newNode; //儲存目前節點
}else {
this.next.addNode(newNode);
}
}
}
//------------以下為Link類中定義的成員-----------------
private Node root ; //儲存根元素
//------------以下為Link類中定義的方法-----------------
public void add(E e){
if(e == null){
return ;
}
//資料本身是不具有關聯特性的,隻有Node類有,要想關聯處理就必須将資料包裝在Node類中
Node newNode = new Node(e); //建立一個新的節點
if (this.root == null){ //現在沒有根節點
this.root = newNode; //第一個節點作為根節點
}else{ //根節點存在
this.root.addNode(newNode); //将新節點儲存在合适的位置
}
}
}
public class LinkDemo{
public static void main(String args[]) {
ILink<String> all = new LinkImpl<String>() ;
all.add("Hello") ;
all.add("World") ;
all.add("MLDN") ;
}
}
Link類隻是負責資料的操作與根節點的處理,而所有後續節點的處理全部都是由Node類負責完成的。
想學習更多的Java的課程嗎?從小白到大神,從入門到精通,更多精彩不容錯過!免費為您提供更多的學習資源。
本内容視訊來源于
阿裡雲大學 下一篇:改數需備案-記錄連結清單資料量 | 帶你學《Java面向對象程式設計》之九十一 更多Java面向對象程式設計文章檢視此處