6.动态数组(增加、删除、扩容)

在计算机科学中,数组是由一组元素(值或变量)组成的数据结构,每个元素有至少一个索引或键来标识。

其代码如下:

public class DynamicArray {


    @Test
    public void test() {
        //在最后位置插入元素
        addLastElement(1);
        addLastElement(3);
        addLastElement(4);
        //在指定位置插入元素
        add(1,2);
        //扩容数组
        addLastElement(5);
        addLastElement(6);
        //删除元素
        System.out.println("删除的元素为:"+removeElement(0));
        stream().forEach(element->{
            System.out.println(element);
        });
    }


    int size = 0; //定义大小
    int capacity = 4; //定义容量
    int[] arr = new int[capacity]; //初始化一个数组


    //在最后插入元素
    public void addLastElement(int element) {
        add(size, element);
    }
    //在指定位置插入元素
    public void add(int index, int element) {
        //插入前判断容量是否足够
        checkCapacity();
        if (index >= 0 && index < size) {
            //将元素拷贝到待插入索引的后面
            System.arraycopy(arr, index, arr, index+1, size - index);
        }
        arr[index] = element;
        size++;
    }

    //检查容量
    public void checkCapacity(){
        if (size == capacity){
            //进行扩容
            capacity= (int) (capacity*1.5);
            //创建新数组
            int[] newArr=new int[capacity];
            //将原数组拷贝到新数组
            System.arraycopy(arr,0,newArr,0,size);
            //让原数组等于新数组
            arr=newArr;
        }
    }

    //查询元素
    public  int get(int index){
        return arr[index];
    }

    //删除元素
    public int removeElement(int index){
        int i = arr[index];
        //判断是否为删除的最后一个元素
        if (index<size-1){
            //将待删除的元素的后面的元素拷贝到前面
            System.arraycopy(arr,index+1,arr,index,size-index-1);
        }

        size--;
        return i;
    }

    //使用stream流遍历元素
    public IntStream stream(){
        return IntStream.of(Arrays.copyOfRange(arr,0,size));
    }
}

图6-1 

先定义一个容量为4的数组,如图6-1所示。

 图6-2

假设插入三个元素1,3,4,只需要在最后位置插入即可,如图6-2所示。

 图6-3

假设在索引为1的位置插入元素2,需要将元素后移为其让出位置,如图6-3所示。

 图6-4

假设删除索引为1的元素,需要将其移到最后位置然后将容量减1即可,如图6-4所示。

 

  图6-5

数组的初始容量为4以及占满了,假设要添加元素5,6这时会将原数组扩大为原来的1.5倍,如图6-5所示。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值