课时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 是链表的长度。


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

相关文章
|
Docker 容器
Docker 容器与镜像的关系是什么?底层原理是什么?
Docker 容器与镜像的关系是什么?底层原理是什么?
832 0
|
3月前
|
人工智能 JSON JavaScript
VTJ.PRO 首发 MasterGo 设计智能识别引擎,秒级生成 Vue 代码
VTJ.PRO发布「AI MasterGo设计稿识别引擎」,成为全球首个支持解析MasterGo原生JSON文件并自动生成Vue组件的AI工具。通过双引擎架构,实现设计到代码全流程自动化,效率提升300%,助力企业降本增效,引领“设计即生产”新时代。
286 1
|
11月前
昇腾910A部署Qwen2-7B教程
Qwen2-7BS适配昇腾910A教程。
|
关系型数据库 OLAP 分布式数据库
揭秘Polardb与OceanBase:从OLTP到OLAP,你的业务选对数据库了吗?热点技术对比,激发你的选择好奇心!
【8月更文挑战第22天】在数据库领域,阿里巴巴的Polardb与OceanBase各具特色。Polardb采用共享存储架构,分离计算与存储,适配高并发OLTP场景,如电商交易;OceanBase利用灵活的分布式架构,优化数据分布与处理,擅长OLAP分析及大规模数据管理。选择时需考量业务特性——Polardb适合事务密集型应用,而OceanBase则为数据分析提供强大支持。
3908 2
|
SQL 关系型数据库 MySQL
数据库基本概念(SQL,索引,视图,事务,日志等)(二)
数据库基本概念(SQL,索引,视图,事务,日志等)(二)
401 0
|
缓存 NoSQL Java
个人项目中技术落地的基础入门(1)
个人项目中技术落地的基础入门
288 6
|
存储 人工智能 自然语言处理
手猫助手Agent技术探索总结(1)
手猫助手Agent技术探索总结
389 6
|
存储 小程序 数据库
服务器数据恢复—异常断电导致存储不可用的数据恢复案例
服务器存储数据恢复环境: 一台存储中有一组由12块SAS硬盘组建的RAID6磁盘阵列,划分为一个卷,分配给几台Vmware ESXI主机做共享存储。该卷中存放了大量Windows虚拟机,这些虚拟机系统盘是统一大小,数据盘大小不确定,数据盘是精简模式。 服务器存储故障: 机房断电导致服务器存储异常关机,加电后存储无法使用。
服务器数据恢复—异常断电导致存储不可用的数据恢复案例
|
Java 开发者 Spring
自动装配在Spring框架中的原理与实现方式
自动装配在Spring框架中的原理与实现方式
|
关系型数据库 MySQL 数据库
SiteGround主机站点工具SITE TOOLS设置教程
当你使用SiteGround搭建WordPress或WooCommerce网站后,你会经常登录到两个不同的网站后台:一个是SiteGround的Site Tools后台,用于进行网站的安全、速度优化、FTP工具和网站备份等技术操作;另一个是WordPress网站后台,主要用于管理网站内容、调整前台显示样式和编辑网站功能。本文我们介绍了如何使用SiteGround SITE TOOLS主机站点工具管理网站。
337 0
SiteGround主机站点工具SITE TOOLS设置教程