数据结构与算法(二)——线性表

这篇博客探讨了Java中的动态数组特性,包括数组的不可变长度、统一数据类型和连续存储空间。接着介绍了线性表的概念,定义了一个线性表接口List,并提供了动态数组的封装,涵盖增删改查等基本操作。此外,还讨论了Collection接口和Iterator接口在Java集合框架中的作用,强调了Iterator在遍历集合中的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、动态数组

Java内置数组的特点:
1、数组的长度一但确定则不可以更改。
2、数组只能存储同一类型的数据
3、数组中每个存储空间大小一致且地址连续。
4、数组提供角标的方式访问元素

动态数组的封装:

属性方面:
int size 数组的有效元素个数
int capacity 数组的最大容量data.length
E[] data 数据的存储容器
行为方面:
增()
删()
改()
查()
其他()

2、线性表的定义:

零个或多个数据元素的有限序列
在这里插入图片描述

线性表接口List的定义:
package 动态数组;
/*
定义线性表的接口List
List支持泛型E
该List线性表中所存储的具体数据类型由外界决定
*/
public interface List<E> extends Iterable<E>{
   

    //获取线性表中元素的有效个数
    int getSize();
    
    //判断线性表是否为空表
    boolean isEmpty();
    
    //在线性表指定的index角标处插入元素e
    void add(int index,E e);

    //在线性表的表头处插入元素e
    void addFirst(E e);

    //在线性表的表位处插入元素e
    void addLast(E e);

    //获取线性表中指定角标index处的元素
    E get(int index);

    //获取表头元素
    E getFirst();

    //获取表尾元素
    E getLast();

    //修改线性表中指定角标index处的元素为新元素e
    void set(int index,E e);

    //判断线性表中是否包含元素e
    boolean contains(E e);

    //查找元素e的角标(从左到又默认第一个出现的元素角标)
    int find(E e);

    //删除并返回线性表中指定角标index处的元素
    E remove(int index);

    //删除并返回表头元素
    E removeFirst();

    //删除并返回表尾元素
    E removeLast();

    //删除指定元素e
    void removeElement(E e);

    //清空线性表
    void clear();
}

线性表的顺序存储结构ArrayList的定义:
在这里插入图片描述

代码实现:
import java.util.Iterator;
/*
创建线性表的顺序存储结构实现类ArrayList
 */
public class ArrayList<E> implements List<E>{
   
    //创建E类型的一维数组
    private E[] data;
    //维护元素的个数
    private int size;
    //默认最大容量为10
    private static int DEAFULT_CAOACITY=10;
    //创建一个默认大小的顺序表
    public ArrayList(){
   
        //data =(E[]) (new Objects[DEAFULT_CAOACITY]);
        //调用下面传参为一个参数的构造函数
        this(DEAFULT_CAOACITY);
    }
    //创建一个容量由用户指定的顺序表
    public ArrayList(int capacity){
   
        if(capacity<=0){
   
            //运行异常,创建异常对象,然后进行抛出
            throw new IllegalArgumentException("容量必须>0"+capacity);
        }
        //对一维数组data进行初始化,类型先给Object再强转为E泛型
        data=(E[])(new Object[capacity]);
        //将有效元素个数初始赋值为0
        size
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值