数据结构 ——数组

数据结构 ——数组

一、数组的介绍

数组:数据结构中最基本的一个结构就是线性结构,而线性结构又分为连续存储结构离散存储结构
所谓的连续存储结构其实就是数组
优点: 查询较快如果知道坐标可以快速去地存取
缺点: 删除慢,大小固定
在这里插入图片描述

二、封装数组

封装数组的增删改查

1. 基类的定义
  • 定义一个工具类名称-Array
  • 接受的参数包括基本类型自定义类型(用泛型来接受,基本类型用包装类)
  • 自定义属性两个size用来表示数组的大小data用来表示一个准确的集合
  • 概念区分size表示数组的大小capacity表示数组容量的大小
  • 构造函数:有参构造,接受一个int值,用来初始化数组容量;无参构造:给容量一个默认值
  • toString()方法:输出数组的大小和数组容量的大小,以及数组中的值
  • getSize()方法,调用方通过方法来获取数组的大小
  • getCapacity()方法,调用方通过方法来获取数组容量的大小
  • isEmpty()方法,调用方通过方法来判断数组是否为空(指的是数组中是否有值,没值就为空)
2. 增:添加的方法
  • add()方法,两个参数,添加元素的索引位置,和元素的值
  • addFirst()方法,在所有元素的最前面添加
  • addLast()方法,在所有元素的最后面添加
3. 改:添加的方法
  • set():两个参数,修改的元素的索引位置,和将要修改的值
4. 查:添加的方法
  • get()方法,一个参数,索引值,根据索引返回对应的值
  • contains()方法,一个参数,判断数组中是否包含某个元素
  • find()方法,一个参数,查找数组中是否包含param,如果包含返回索引值,不包含返回-1
  • findAll()方法,一个参数,查找数组中是否包含param,返回包含的索引数组
5. 删:添加的方法
  • remove()方法,数组中删除index位置的元素,并且返回对应的值
  • removeFirst()方法,删除第一位元素
  • removeLast()方法,删除最后一位元素
  • removeElement()方法,查看某个值是否在数组中存在,如果存在,删除并返回true,如果不存在 返回false、
  • removeLast()方法, 查找所有元素,获取所有相等的索引,遍历移除
6. 扩容的方法
  • resize()法方,定义为私有,调用方不能通过方法来调用,去修改,否则容易造成BUG
  • 扩容倍数,如果用固定值,不好抉择。比如:100容量,扩容10个,没有意义,很快就满了;100容量,扩充1000个,太多了,容易早证浪费。最好选择倍数,都在同一个单位级别,这里代码选择的是2倍
  • 添加的时候需要判断扩容,删除的时候需要删除容量,减少资源浪费
  • 删除的时候,当元素减少到容量的1/4的时候开始缩,缩减到容量的1/2
  • 如果选择1/2的时候开始缩减,然后缩减到1/2会有一定的问题,例如:容量10,现在容量满了,来了一个元素,需要扩容,按照设置的扩容机制,会扩容2倍,也就是20容量,如果删除了一个元素,元素达到了容量的1/2,我们开始进行缩减,缩减1/2,容量又变为10。如果一直在这个临界值,那么元素会一直进行扩容缩减扩容缩减,性能影响太大。
  • 如果选择1/4的时候开始缩减,然后缩减到1/2,这样能够较好的避开以上问题,例如:容量10,容量满了,来了一个元素,扩容容量到了20,如果删除一个元素,还不到容量的1/4,所以还不会进行缩减,如果真的到了容量的1/4的时候,我们选择缩减1/2,容量也需要一定的元素,才会进行扩容,防止了容量一直扩容或者缩减

三、代码实现

public class Array{
   
    private E[] data; //存储数据
    private Integer size; //真实元素个数
    public Array(){
   
          this(10); //初始大小
    }
    public Array(int capacity){
   
          data = (E[])new Object[capacity];
          size = 0;
    }
  /**
     * 获取数组中的元素个数
     * @return
     */
    public Integer getSize(){
   
        return size;
    }
    /**
     * 获取数组的容量
     * @return
     */
    public Integer getCapacity(){
   
        return data.length;
    }
    /**
     * 判断数组是否为空
     * @return
     */
    public 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值