课时138:根据索引取得数据

简介: 课时138介绍了根据索引获取链表数据的方法。主要内容包括:1. 索引访问的需求与方法;2. 在ILink接口中添加get(int index)方法;3. 在Node类中实现getNode(int index)方法;4. 在LinkImpl子类中实现get(int index)方法;5. 测试代码及结果。通过这些步骤,实现了类似数组的索引访问功能,但需注意链表的时间复杂度为O(n),而数组为O(1)。

课时138:根据索引取得数据

摘要:

1. 索引访问的需求

2. 索引访问的方法

 

01. 索引访问

 

链表也可以像数组一样进行索引数据的获取。在这种情况下,我们可以继续使用递归的形式来完成。


注:数据都有索引,索引(Index)是用于标识数据位置的整数值。在链表中,索引从 0 开始,依次递增。例如,第一个数据的索引为 0,第二个数据的索引为 1,以此类推。通过索引,我们可以快速定位并获取特定位置的数据。为了根据索引获取数据,我们需要遍历链表,逐个判断当前节点的索引是否与目标索引匹配。


如果匹配,则返回该节点的数据;如果不匹配,则继续遍历下一个节点,直到找到目标索引或遍历结束。用 Foot 获取索引值,实现针对索引的控制。索引值不可超过数据量。


注:通过索引访问链表中的数据,可以方便地获取指定位置的数据项,类似于数组的访问方式。

 

image.png

 

02. 索引访问的方法

 

1.在 ILink 接口中添加 get(int index) 方法

interface ILink<E> {//设置范型避免安全隐患
    public  void  add(E e);//增加数据的个数
    public int size();//获取数据的个数
    public Object [] toArray();
     public boolean isEmpty(); 
     public  E get(int index); // 根据索引获取数据
}

 

2.在 Node 类中添加 getNode(int index) 方法

 

public E getNode(int index) {
        if (LinkImpl.this.foot ++== index) {//索引相同
            return this.data; //返回当前数据 
        } else {
            return  this.next.getNode(index);
            }
        }

 

3.在 LinkImpl 子类中实现 get(int index) 方法

public E get(int index) {
    if (index >= this.count) {// 索引应该在指定的范围内
        return null;
    }//索引数据的获取应该由 node 位完成
    this.foot = 0;//重制索引的下标
return this.root.getNode(index);
}

 

4.进行测试

public class LinkDemo {
    public static void main(String[] args) {
        ILink<String> all = new LinkImpl<String>();
        System.out.println("【增加之前】数据个数:" + all.size()+"、是否为空集合:"+all.isEmpty());
        all.add("Hello");
        all.add("World");
        all.add("MLDN");
        System.out.println("【增加之后】数据个数:" +  all.size()+"、是否为空集合:"+all.isEmpty());
        System.out.println("------数据获取的分割线-------");
        System.out.println(all.get(0));
        System.out.println(all.get(1));
        System.out.println(all.get(4)); // 索引超出范围
    }
}

执行后结果为:

image.png

通过以上步骤,我们实现了通过索引访问链表数据的能力。 这种方法与数组的访问方式类似,但需要注意的是,数组获取数据的时间复杂度为 O(1),而链表获取数据的时间复杂度为 O(n),其中 n 是链表的长度。


这是因为链表需要从头开始遍历,直到找到目标索引对应的数据。 因此,在需要频繁进行索引访问的场景下,数组可能更适合。

相关文章
|
算法 搜索推荐 安全
淘宝信息流融合混排服务升级
淘宝信息流融合混排服务升级
749 1
|
Docker 容器
Docker 容器与镜像的关系是什么?底层原理是什么?
Docker 容器与镜像的关系是什么?底层原理是什么?
811 0
|
2月前
|
人工智能 JSON JavaScript
VTJ.PRO 首发 MasterGo 设计智能识别引擎,秒级生成 Vue 代码
VTJ.PRO发布「AI MasterGo设计稿识别引擎」,成为全球首个支持解析MasterGo原生JSON文件并自动生成Vue组件的AI工具。通过双引擎架构,实现设计到代码全流程自动化,效率提升300%,助力企业降本增效,引领“设计即生产”新时代。
231 1
|
11月前
|
并行计算 异构计算
卸载原有的cuda,更新cuda
本文提供了一个更新CUDA版本的详细指南,包括如何查看当前CUDA版本、检查可安装的CUDA版本、卸载旧版本CUDA以及安装新版本的CUDA。
8902 3
卸载原有的cuda,更新cuda
|
10月前
昇腾910A部署Qwen2-7B教程
Qwen2-7BS适配昇腾910A教程。
|
SQL 关系型数据库 MySQL
数据库基本概念(SQL,索引,视图,事务,日志等)(二)
数据库基本概念(SQL,索引,视图,事务,日志等)(二)
390 0
|
机器学习/深度学习 测试技术 PyTorch
深度学习之测量GPU性能的方式
在深度学习中,测量GPU性能是一个多方面的任务,涉及运行时间、吞吐量、GPU利用率、内存使用情况、计算能力、端到端性能测试、显存带宽、框架自带性能工具和基准测试工具等多种方法。通过综合使用这些方法,可以全面评估和优化GPU的性能,提升深度学习任务的效率和效果。
948 3
|
关系型数据库 OLAP 分布式数据库
揭秘Polardb与OceanBase:从OLTP到OLAP,你的业务选对数据库了吗?热点技术对比,激发你的选择好奇心!
【8月更文挑战第22天】在数据库领域,阿里巴巴的Polardb与OceanBase各具特色。Polardb采用共享存储架构,分离计算与存储,适配高并发OLTP场景,如电商交易;OceanBase利用灵活的分布式架构,优化数据分布与处理,擅长OLAP分析及大规模数据管理。选择时需考量业务特性——Polardb适合事务密集型应用,而OceanBase则为数据分析提供强大支持。
3740 2
|
Java 开发者 Spring
自动装配在Spring框架中的原理与实现方式
自动装配在Spring框架中的原理与实现方式
|
关系型数据库 MySQL 数据库
SiteGround主机站点工具SITE TOOLS设置教程
当你使用SiteGround搭建WordPress或WooCommerce网站后,你会经常登录到两个不同的网站后台:一个是SiteGround的Site Tools后台,用于进行网站的安全、速度优化、FTP工具和网站备份等技术操作;另一个是WordPress网站后台,主要用于管理网站内容、调整前台显示样式和编辑网站功能。本文我们介绍了如何使用SiteGround SITE TOOLS主机站点工具管理网站。
328 0
SiteGround主机站点工具SITE TOOLS设置教程