系列文章目录

文章目录

  • ​​系列文章目录​​
  • ​​前言​​
  • ​​一、动态数组​​
  • ​​二、使用步骤​​
  • ​​总结​​

前言

数据结构:
逻辑结构是针对程序员的角度来说的
物理结构是针对程序员如何实现这个逻辑结构的角度来说的

一、动态数组

物理结构:数组
逻辑结构:动态数组
对于使用者来说,可以扩容,自动记录有效的元素个数
MyArrayList:
MyArrayList我们自己设计的一种数据结构,一种逻辑结构,当别人用我这个MyArrayList的对象时,就是一个容器对象

二、使用步骤

00019.02 手动实现动态数组(逻辑结构、ArrayList)_动态数组


00019.02 手动实现动态数组(逻辑结构、ArrayList)_数组_02


我们要它具备什么能力,那么就需要给它添加方法

00019.02 手动实现动态数组(逻辑结构、ArrayList)_动态数组_03


00019.02 手动实现动态数组(逻辑结构、ArrayList)_动态数组_04


00019.02 手动实现动态数组(逻辑结构、ArrayList)_逻辑结构_05

00019.02 手动实现动态数组(逻辑结构、ArrayList)_逻辑结构_06


然后使用者在使用的时候就可以不断的往里面加了

00019.02 手动实现动态数组(逻辑结构、ArrayList)_逻辑结构_07


00019.02 手动实现动态数组(逻辑结构、ArrayList)_数组_08

可以继续优化

00019.02 手动实现动态数组(逻辑结构、ArrayList)_数组_09


使用者的调用如下:

00019.02 手动实现动态数组(逻辑结构、ArrayList)_数组_10


00019.02 手动实现动态数组(逻辑结构、ArrayList)_动态数组_11


00019.02 手动实现动态数组(逻辑结构、ArrayList)_动态数组_12


由于我们多次使用到了这个方法,所以我们按下快捷键Alt+shift+M,可以实现快速操作,将该方法提取出来

00019.02 手动实现动态数组(逻辑结构、ArrayList)_动态数组_13


00019.02 手动实现动态数组(逻辑结构、ArrayList)_动态数组_14


然后测试就行了

00019.02 手动实现动态数组(逻辑结构、ArrayList)_动态数组_15

00019.02 手动实现动态数组(逻辑结构、ArrayList)_逻辑结构_16


00019.02 手动实现动态数组(逻辑结构、ArrayList)_动态数组_17


效果如下:

00019.02 手动实现动态数组(逻辑结构、ArrayList)_数组_18


删除某个位置的元素

00019.02 手动实现动态数组(逻辑结构、ArrayList)_逻辑结构_19

src:源数组

srcPos:源数组要复制的起始位置

dest:目标数组

destPos:目标数组复制的起始位置

length:复制的长度

00019.02 手动实现动态数组(逻辑结构、ArrayList)_逻辑结构_20

调用,然后看效果

00019.02 手动实现动态数组(逻辑结构、ArrayList)_逻辑结构_21


00019.02 手动实现动态数组(逻辑结构、ArrayList)_数组_22


如果是null怎么处理,优化后的代码

00019.02 手动实现动态数组(逻辑结构、ArrayList)_数组_23


运行后的效果如下:

00019.02 手动实现动态数组(逻辑结构、ArrayList)_动态数组_24

如果删除某个元素,但是我们不知道下标,如果有重复的,我们只删除第一个,怎么实现

00019.02 手动实现动态数组(逻辑结构、ArrayList)_动态数组_25


如果要替换某个元素,怎么写?

00019.02 手动实现动态数组(逻辑结构、ArrayList)_逻辑结构_26

总结

1、大量使用到了System.arraycopy()等方法,需要深刻理解
2、自己写一遍,有助于看懂源代码