【本節目标】
通過閱讀本節内容,你将學會在連結清單中通過上一節中提到的foot屬性實作對指定位置資料進行取值和改值的操作。
根據索引取得資料:public E get(int index)
連結清單可以像數組一樣進行處理,是以也應該可以像數組一樣進行索引資料的擷取,在這樣的情況下就可以繼續利用遞歸的形式來完成。

圖一 依據索引擷取資料
1、在ILink接口中追加新的方法
public E get(int index) ; //根據索引擷取資料
2、在Node類裡面追加有根據索引擷取資料的處理
public E getNode(int index) {
if (LinkImpl.this.foot ++ == index) { //索引相同
return this.data ; //傳回目前資料
}else {
return this.next.getNode(index) ;
}
}
3、在LinkImpl子類裡面定義資料擷取的實作
public E get(int index) {
if (index >= this.count) { //索引應該在指定的範圍之内
return null ;
} //索引資料的擷取應該由Node類完成
this.foot = 0 ; //重置索引的下标
return this.root.getNode(index) ;
}
圖二 執行結果圖
這一特點和數組是很相似的,但是需要注意的是,數組擷取一個資料的時間複雜度為1,而連結清單擷取資料的時間複雜度為n。
修改指定索引資料:public void set(int index, E data)
現在已經可以根據索引來擷取指定的索引資料了,但是既然可以擷取資料,那麼也可以進行資料的修改。
1、在ILink接口中追加有新的方法
public void set(int index,E data) ; //修改索引資料
2、在Node類之中應該提供有資料修改的處理支援
public void setNode(int index,E data) {
if (LinkImpl.this.foot ++ == index) { //索引相同
this.data = data ; //修改資料
}else {
this.next.setNode(index,data) ;
}
}
3、在LinkImpl子類裡面進行方法的覆寫。
public void set(int index,E data) {
if (index >= this.count) { //索引應該在指定的範圍之内
return ; //方法結束
} //索引資料的擷取應該由Node類完成
this.foot = 0 ; //重置索引的下标
this.root.setNode(index,data) ; //修改資料
}
圖三 執行結果二
這種操作的時間複雜度也是n,因為依然需要進行資料的周遊處理。
想學習更多的Java的課程嗎?從小白到大神,從入門到精通,更多精彩不容錯過!免費為您提供更多的學習資源。
本内容視訊來源于
阿裡雲大學 下一篇:連結清單資料“暗殺記” | 帶你學《Java面向對象程式設計》之九十四 更多Java面向對象程式設計文章檢視此處