天天看點

速度了解神奇的索引操作 | 帶你學《Java面向對象程式設計》之九十三

上一篇:教你實作連結清單判空與取值方法 | 帶你學《Java面向對象程式設計》之九十二

【本節目标】

通過閱讀本節内容,你将學會在連結清單中通過上一節中提到的foot屬性實作對指定位置資料進行取值和改值的操作。

根據索引取得資料:public E get(int index)

連結清單可以像數組一樣進行處理,是以也應該可以像數組一樣進行索引資料的擷取,在這樣的情況下就可以繼續利用遞歸的形式來完成。

速度了解神奇的索引操作 | 帶你學《Java面向對象程式設計》之九十三

圖一 依據索引擷取資料

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) ;
}           
速度了解神奇的索引操作 | 帶你學《Java面向對象程式設計》之九十三

圖二 執行結果圖

這一特點和數組是很相似的,但是需要注意的是,數組擷取一個資料的時間複雜度為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) ;  //修改資料
}             
速度了解神奇的索引操作 | 帶你學《Java面向對象程式設計》之九十三

圖三 執行結果二

這種操作的時間複雜度也是n,因為依然需要進行資料的周遊處理。

想學習更多的Java的課程嗎?從小白到大神,從入門到精通,更多精彩不容錯過!免費為您提供更多的學習資源。

本内容視訊來源于

阿裡雲大學 下一篇:連結清單資料“暗殺記” | 帶你學《Java面向對象程式設計》之九十四 更多Java面向對象程式設計文章檢視此處