《java数据结构》--顺序表详解

一.顺序表的概念🙉

🐱顺序表是一段物理地址连续的储存单元,一次储存数据元素的线性结构。一般情况下采用数组储存,和数组的增删查改类似。

但是顺序表和数组还是有区别的比如,数组按照是否可以扩容可以分为,静态顺序表和动态顺序表。

静态顺序表,就是顺序表的储存容量是不变的;动态顺序表,就是当顺序表的容量满了的时候可以自动扩容。

二.顺序表的实现🐱

1.创建顺序表🐱

刚刚有提到顺序表的储存逻辑和数组差不多所以我们只需要在内部定义一个数组和记录容量大小的UsedSize即可。(为了之后方便使用这里使用的是泛型(传入什么类型就是什么类型),如果不理解泛型的这里可以直接把T当作int来看,不影响)

UsedSize:顺序表内实际存储的数据长度(不是顺序表内存大小)

6cc55270cb184920beb7ca529d8f59c2.png

2.判断顺序表是否为空🐱

因为后面会用到较多,所以我们先来写这个方法,其实顺序表内很多方法都很简单,比如下面这个

我们只需要判断顺序表中存储数据的数量是否和顺序表的内存大小是否相同即可

e776eb9d3fd44eca925ac2dafa99edd4.png

3.指定位置添加数据*🐱

在添加数据之前我们要先看一看,顺序表是否已经满了,如果满了就扩容(直接使用copyOf)。接下来开始添加,既然要指定位置添加数据那么原来的数据顺序肯定不能变而且被指定的位置肯定还要是可覆盖的,我们直接让那个位置以后的数据都向后移动一步就行,然后用要添加的数据直接覆盖掉那个位置就行。(指定的位置要合法)

0ac94025d4434a95b75200181c2408ac.png

4.检查范围🐱

检查传进来的位置是否合法,方便之后方法的实现

9215019bc36744deb79d3b294a9b6cee.png

5.删除数据🐱

这个方法也是十分的简单的呢!只需要检查一下位置是否合法,然后直接覆盖掉指定位置就行了。看是不是,辉常简单😉😉

29af127e6a61456a94ed1ebe506b3d00.png

6.查找指定数据🐱

只需要遍历顺序表一一对比就行然后返回下标

2a3f8dd55d3f4264bd89ac57c05546b1.png

7.删除第一次出现的数据🐱

要删除某个数据,我们就要先找到这个数据,这里直接使用我们刚刚实现的Find方法就可以了!找到之后直接删掉这个位置的数据就行,到这里我们的顺序表基本快实现完了,是不是感觉just so so

8b00bd54600243a894bb1172e68d85b1.png

8.获取长度和清空顺序表🐱

清空顺序表只需要将UsedSize置为0就好

ab28bee2486246719f8694e8694a6ee6.png

到这里我们的顺序表就实现完了,但是Java中的顺序表还有很多方法有兴趣的小伙伴可以自己去实现一下。

三.顺序表的使用🦊

顺序表的使用方法比较简单直接创建一个对象就行这里就不多做赘述了

我们来看一看Java中提供了顺序表的哪些方法

//这些方法大部分都很好理解,如果有兴趣的小伙伴可以自己试着实现一些😊,不过对于sublist这个方法你可能会有些疑问,截取部分list具体是怎么回事呢?

它的具体作用是返回一个顺序表,这个顺序表是原来的顺序表的一部分,具体的范围是[fromIndex,toIndex)下标位置的数据。我们来看一个例子

23ed9f52333e4e959d0c8fb10d0e55d5.png

4603c51e72034bc5845b166286a9dad7.png

//这里改了list 3,结果list 1也跟着改了,是因为,sublist方法,并不是返回一个新的数组,而是返回原来数组的sublist的方法的第一个参数下标处的地址也就是返回1下标处的地址,还是在对同一个数组操作

四.顺序表的打印🐭

顺序表的打印方法一般有一下几种:

1 sout,

2 for,

3 foreach

4迭代器

这里重点来聊聊迭代器(Integer)(具体内容我直接写在代码注释里了)

🙉到这里顺序表的内容就聊完了,如果你还有什么疑问🤔🧐或者不同的见解欢迎在下方评论或私信小编,最后也希望可以支持一下小编啦!!!🥰🥰

  • 16
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值