【本節目标】
通過閱讀本節内容,你将掌握連結清單查詢方法contains()與删除方法remove()、清表方法clean()的實作,對單向連結清單的所有基本功能擁有初步的掌握與了解。
判斷指定資料是否存在:public boolean contains(E data)
在一個集合裡面往往會儲存大量的資料,有些時候需要判斷某個資料是否存在,這個時候就可以通過對象比較的模式(equals()方法)來完成判斷。
1、在ILink接口中追加判斷的方法
public boolean contains(E data) ; //判斷資料是否存在
2、在Node類中進行依次判斷
public boolean containsNode(E data) {
if (this.data.equals(data)) { //對象比較
return true ;
}else {
if (this.next == null) { //沒有後續節點
return false ; //找不到
}else {
return this.next.containsNode(data) ; //向後繼續判斷
}
}
}
3、在LinkImpl子類裡面實作此方法
public boolean contains(E data) {
if (data == null) {
return false ; //沒有資料
}
return this.root.containsNode(data) ; //交給Node類判斷
}

圖一 執行結果一
由于整個連結清單沒有空資料的存在,是以整體的程式在判斷的時候直接使用每一個的節點資料發出equals()方法調用即可。
資料删除:public void remove(E data)
資料的删除值得是可以從集合裡面删除掉指定的一個資料内容,也就是說此時傳遞的是資料内容,那麼如果要實作這種删除操作依然需要對象比較的支援。但是對于集合資料的删除需要考慮兩種情況:
要删除的是根節點資料:(LinkImpl與根節點有關,是以這個判斷由跟節點完成)
圖二 删除根節點
要删除的不是根節點資料:(由Node類負責)
圖三 删除的不是根節點
1、在ILink接口裡面追加新的删除方法
public void remove(E e) ; //資料删除
2、在LinkImpl子類裡面實作根節點的判斷
public void remove(E data) {
if (this.contains(data)) { //判斷資料是否存在
if(this.root.data.equals(data)) { //根節點為要删除節點
this.root = this.root.next ; //根的下一個節點
}
this.count -- ;
}
}
3、如果現在根節點并不是要删除的節點,那麼就需要進行後續節點的判斷,但是請一定要記住,此時根節點已經判斷完成,再判斷應該從根節點的下一個開始判斷。在Node類中追加删除處理。
public void removeNode (Node previous,E data) {
if (this.data.equals(data)) {
previous.next = this.next ; //空出目前節點
}else {
if (this.next != null) { //有後續節點
this.next.removeNode(this, data) ; //向後繼續删除
}
}
}
4、完善LinkImpl子類中的remove()方法
public void remove(E data) {
if (this.contains(data)) { //判斷資料是否存在
if (this.root.data.equals(data)) { //根節點為要删除節點
this.root = this.root.next ; //根的下一個節點
}else { //交由Node類進行删除
this.root.next.removeNode(this.root , data) ;
}
this.count -- ;
}
}
圖四 執行結果二
删除邏輯依靠的就是引用的改變處理完成的。
清空連結清單:public void clean()
有些時候需要進行連結清單資料的整體清空處理,這個時候就可以直接根據根元素來進行控制,隻要root設定為了null,那麼後續的節點就都不存在了。
1、在ILink接口裡面追加有清空處理方法
public void clean() ; //清空集合
2、在LinkImpl子類裡面覆寫方法
public void clean() {
this.root = null ; //後續的所有節點都沒了
this.count = 0 ; //個數清零
}
圖五 執行結果三
if (result != null) {
for (Object obj : result) {
System.out.println(obj) ;
}
}
資料不為空,進行處理。
圖六 執行結果圖
這些就是連結清單的基本功能,當然,這隻是一個最簡單最基礎的單向連結清單的實作。
想學習更多的Java的課程嗎?從小白到大神,從入門到精通,更多精彩不容錯過!免費為您提供更多的學習資源。
本内容視訊來源于
阿裡雲大學 下一篇:連結清單實戰之寵物商店 | 帶你學《Java面向對象程式設計》之九十五 更多Java面向對象程式設計文章檢視此處