数据结构与算法---动态数组(1)数组列表ArrayList

  1. Java内置数组的特点
    数组的长度一旦确定则不可改变
    数组只能存储同一类型的数据
    数组中每个存储空间大小一致且地址连续
    数组提供角标的方式访问元素
  2. 动态数组的封装
    可以把数组的相关属性和相关行为封装在类中
  3. 线性表的顺序存储结构
    线性表的定义:零个或多个数据元素的有限序列
    线性表的第一个元素无前驱有后继,最后一个元素有前驱无后继,其他元素均有前驱和后继
    在这里插入图片描述线性表的接口需要支持泛型E,表示该线性表中所存储的具体数据类型由外界决定,假如E为Integer,则它创建的对象均为integer类
    线性表的接口内容
    在这里插入图片描述线性表顺序存储结构的定义:指的使用一段地址连续的存储单元依次储存线性表的数据元素
    线性表的顺序存储结构实现类(Arraylist)
    成员变量
    在这里插入图片描述成员函数
    在这里插入图片描述在这里插入图片描述接口的实现
    在这里插入图片描述在特定位置插入元素,我们需要注意以下几点(以在位置2插入元素为例)
    在这里插入图片描述1.插入的角标位置是否合理(size可以表示当前线性表的表尾)
    2.判断线性表是否已经满了,若满则需要扩容在添加元素
    3.从size的位置开始遍历,到插入位置的后一个,size–,然后将前一个元素赋给后一个
    4.遍历完之后将e插入到位置2,然后有效元素个数++;
    在这里插入图片描述在这里插入图片描述扩容
    1.先创建一个新数组,
    2.将原来数组的元素,全部放到新数组中
    3.此时的数组尾建的新数组,size保持不变
    缩容
    1.创建一个新数组
    2.将原数组的内容赋给新数组
    在这里插入图片描述得到index下标位置的元素
    1.判断数组是否为空
    2.判断输入的角标是否合法
    3.若上边两者都不满足,则返回值
    在这里插入图片描述修改指定角标处的元素
    1.判断数组是否为空
    2.判断输入的角标是否合法
    在这里插入图片描述找到元素e的第一个角标
    1.先判断数组是否为空
    2.若不为空,则遍历数组,若内容相同,则返回下标,否则返回-1.
    在这里插入图片描述在这里插入图片描述将对象转成字符串–当外界打印list的时候,相当于调用toString()
    在这里插入图片描述StringBuilder–可变字符串,等同于+号
    append(boolean b)----将boolean参数的字符串表示形式追加到序列
    String.format( )----格式化输出
    1.若对象为空,则直接添加字符’]’;
    2.若不为空,则开始遍历,将数字添加进去
    3.若为最后一个位置,则添加’]’,否则添加‘ ,’
    4.最后利用StringBuilder中的toString方法,来返回字符串
    在这里插入图片描述删除指定角标的元素在这里插入图片描述在这里插入图片描述1.判断数组是否为空
    2.判断角标位置是否合理
    3.将所要删除的元素进行记录
    4.遍历数组,将后边的元素依次赋给前一个
    5.最后size–;
    6.若删除后的size变为之前数组长度的1/4并且数组的长度要大于的数组默认长度时,则需要缩容
    在这里插入图片描述删除指定元素
    1.现在数组里边找find(e)该元素
    2.若有则返回移除
    3.若没有则提示元素不存在
    在这里插入图片描述迭代器
    在这里插入图片描述接口Iterable里有迭代器iterator()方法,所以让list接口继承Iterable
    又因为iterato为接口不能创建对象,所以我们可以新建一个ArrayListIterator类,来实现iterato方法。
    iterato中有两个成员函数hasNext()和next()方法
    在这里插入图片描述
发布了22 篇原创文章 · 获赞 3 · 访问量 342

猜你喜欢

转载自blog.csdn.net/qq_45161607/article/details/103457064