【本節目标】
通過閱讀本節内容,你将學會實作isEmpty()和toArray()方法,為連結清單對象提供直接判斷是否為空以及擷取連結清單資料的方法,進一步完善連結清單類的相關功能。
空集合判斷:public Boolean isEmpty()
連結清單裡面可以儲存有若幹資料,如果說現在連結清單還沒有儲存資料,則就表示是一個空集合,則應該提供有一個空的判斷。
1、在ILink接口裡面追加有判斷方法:
public boolean isEmpty() ; //判斷是否空集合
2、在LinkImpl子類裡面覆寫此方法。
public boolean isEmpty() {
//return this.root == null ;
return this.count == 0 ;
}
使用根節點或者長度判斷其本質是一樣的。
interface ILink<E> { //設定泛型避免安全隐患
public void add(E e) ; //增加資料
public int size() ; //擷取資料的個數
public boolean isEmpty() ; //判斷是否空集合
}
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 ; //儲存根元素
private int count ; //儲存資料的個數
//------------以下為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); //将新節點儲存在合适的位置
}
this.count++ ;
}
public int size() {
return this.count ;
}
public boolean isEmpty() {
//return this.root == null ;
return this.count == 0 ;
}
}
public class LinkDemo{
public static void main(String args[]) {
ILink<String> all = new LinkImpl<String>() ;
System.out.println("【增加之前】資料個數:" + all.size() + "、是否為空集合:" + all.isEmpty()) ;
all.add("Hello") ;
all.add("World") ;
all.add("MLDN") ;
System.out.println("【增加之後】資料個數:" + all.size() + "、是否為空集合:" + all.isEmpty()) ;
}
}

圖一 執行結果圖
傳回集合資料:public Object[] toArray()
連結清單本身就屬于一個動态對象數組,那麼既然是一個對象數組,就應該可以把所有的資料以數組的形式傳回來,那麼這個時候就可以定義一個toArray()方法,但是這個時候的方法隻能夠傳回Object型的數組。
圖二 資料傳回
1、在ILink接口裡面追加新的處理方法:
public Object[] toArray() ; //将集合元素以數組的形式傳回
2、在LinkImpl子類裡面追加有兩個屬性:
private int foot ; //描述的是操作數組的腳标
private Object [] returnData ; //傳回的資料儲存
3、在Node類中根據遞歸擷取資料
//第一次調用:this = LinkImpl.root
//第二次調用:this = LinkImpl.root.next
//第三次調用:this = LinkImpl.root.next.next
public void toArrayNode() {
LinkImpl.this.returnData [LinkImpl.this.foot ++] = this.data ;
if (this.next != null) { //還有下一個資料
this.next.toArrayNode() ;
}
}
4、在進行資料傳回的時候一定要首先判斷資料傳回是否為空
public Object[] toArray() {
if (this.isEmpty()) { //空集合
return null ; //現在沒有資料
}
this.foot = 0 ; //腳标清零
this.returnData = new Object[this.count] ; //根據已有的長度開辟數組
this.root.toArrayNode() ; //利用Node類進行遞歸資料擷取
return this.returnData ;
}
圖三 執行結果圖
集合的資料一般如果要傳回肯定要以對象數組的形式傳回。
想學習更多的Java的課程嗎?從小白到大神,從入門到精通,更多精彩不容錯過!免費為您提供更多的學習資源。
本内容視訊來源于
阿裡雲大學 下一篇:速度了解神奇的索引操作 | 帶你學《Java面向對象程式設計》之九十三 更多Java面向對象程式設計文章檢視此處