速度了解神奇的索引操作 | 带你学《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面向对象编程文章查看此处

上一篇:海关启动大规模自主可控WAPI网络建设


下一篇:链表实战之宠物商店 | 带你学《Java面向对象编程》之九十五