速度了解神奇的索引操作 | 带你学《Java面向对象编程》之九十三

简介: 本节带领读者实现了根据索引取数据和修改数据的操作,并对这些操作进行了简单的复杂度分析。

上一篇:教你实现链表判空与取值方法 | 带你学《Java面向对象编程》之九十二
【本节目标】
通过阅读本节内容,你将学会在链表中通过上一节中提到的foot属性实现对指定位置数据进行取值和改值的操作。

根据索引取得数据:public E get(int index)

链表可以像数组一样进行处理,所以也应该可以像数组一样进行索引数据的获取,在这样的情况下就可以继续利用递归的形式来完成。

image.png
图一 依据索引获取数据

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) ;
}

image.png
图二 执行结果图

这一特点和数组是很相似的,但是需要注意的是,数组获取一个数据的时间复杂度为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) ;  //修改数据
}  

image.png
图三 执行结果二

这种操作的时间复杂度也是n,因为依然需要进行数据的遍历处理。

想学习更多的Java的课程吗?从小白到大神,从入门到精通,更多精彩不容错过!免费为您提供更多的学习资源。
本内容视频来源于阿里云大学

下一篇:链表数据“暗杀记” | 带你学《Java面向对象编程》之九十四
更多Java面向对象编程文章查看此处

相关文章
|
8天前
|
分布式计算 DataWorks Java
DataWorks操作报错合集之在使用MaxCompute的Java SDK创建函数时,出现找不到文件资源的情况,是BUG吗
DataWorks是阿里云提供的一站式大数据开发与治理平台,支持数据集成、数据开发、数据服务、数据质量管理、数据安全管理等全流程数据处理。在使用DataWorks过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
25 0
|
1月前
|
SQL Java 数据库连接
java使用jdbc操作数据库
java使用jdbc操作数据库
|
1月前
|
设计模式 安全 Java
面向对象编程的精髓:Java设计模式 - 原型模式(Prototype)完全参考手册
【4月更文挑战第7天】原型模式是OOP中的创建型设计模式,用于通过复制现有实例创建新实例,尤其适用于创建成本高或依赖其他对象的情况。它包括Prototype接口、ConcretePrototype实现和Client客户端角色。优点是性能优化、避免子类化和动态增加产品族。实现包括定义原型接口、实现具体原型和客户端调用克隆方法。最佳实践涉及确保克隆正确性、选择深拷贝或浅拷贝及考虑线程安全。但需注意克隆方法管理、性能开销和循环引用等问题。在Java中,实现Cloneable接口和覆盖clone方法可实现原型模式。
|
1月前
|
安全 Java 数据安全/隐私保护
|
16天前
|
Java 测试技术 Python
《手把手教你》系列技巧篇(二十九)-java+ selenium自动化测试- Actions的相关操作上篇(详解教程)
【4月更文挑战第21天】本文介绍了Selenium中处理特殊测试场景的方法,如鼠标悬停。Selenium的Actions类提供了鼠标悬停功能,用于模拟用户在网页元素上的悬停行为。文中通过实例展示了如何使用Actions悬停并展开下拉菜单,以及在搜索时选择自动补全的字段。代码示例包括了打开百度首页,悬停在“更多”元素上显示下拉菜单并点击“音乐”,以及在搜索框输入关键词并自动补全的过程。
38 0
|
8天前
|
Java 测试技术 Python
《手把手教你》系列技巧篇(三十六)-java+ selenium自动化测试-单选和多选按钮操作-番外篇(详解教程)
【4月更文挑战第28天】本文简要介绍了自动化测试的实战应用,通过一个在线问卷调查(<https://www.sojump.com/m/2792226.aspx/>)为例,展示了如何遍历并点击问卷中的选项。测试思路包括找到单选和多选按钮的共性以定位元素,然后使用for循环进行点击操作。代码设计方面,提供了Java+Selenium的示例代码,通过WebDriver实现自动答题。运行代码后,可以看到控制台输出和浏览器的相应动作。文章最后做了简单的小结,强调了本次实践是对之前单选多选操作的巩固。
23 0
|
12小时前
|
SQL Java 数据库连接
Java数据库编程实践:连接与操作数据库
Java数据库编程实践:连接与操作数据库
8 0
|
14小时前
|
Java
Java一分钟之-类与对象:面向对象编程入门
【5月更文挑战第8天】本文为Java面向对象编程的入门指南,介绍了类与对象的基础概念、常见问题及规避策略。文章通过代码示例展示了如何定义类,包括访问修饰符的适当使用、构造器的设计以及方法的封装。同时,讨论了对象创建与使用时可能遇到的内存泄漏、空指针异常和数据不一致等问题,并提供了相应的解决建议。学习OOP需注重理论与实践相结合,不断编写和优化代码。
10 1
|
6天前
|
XML 前端开发 Oracle
16:JSP简介、注释与Scriptlet、Page指令元素、Include操作、内置对象、四种属性-Java Web
16:JSP简介、注释与Scriptlet、Page指令元素、Include操作、内置对象、四种属性-Java Web
10 2
|
8天前
|
存储 NoSQL 安全
java 中通过 Lettuce 来操作 Redis
java 中通过 Lettuce 来操作 Redis
java 中通过 Lettuce 来操作 Redis