• 极客专栏正式上线!欢迎访问 https://www.jikewenku.com/topic.html
  • 极客专栏正式上线!欢迎访问 https://www.jikewenku.com/topic.html

数据结构笔记总结(1.3)向数组中添加元素

极客笔记 Geekerstar 12个月前 (05-06) 472次浏览 已收录 0个评论 扫描二维码
文章目录[隐藏]

向数组中添加元素原理解析

size这个变量其实就是指向数组中第一个没有元素的位置,我们向数组末尾添加元素其实就是相当于向size这个位置添加元素。

初始的时候,数组尾空,首先向数组中添加一个66,size++

同理,我们再添加一个元素88,此时size=1,向数组末尾添加一个元素,让data[1]=88,之后size++。

向指定位置添加元素

把77插入索引为1的位置

因此需要把当前索引为1的元素以及之后所有的元素向后挪一个位置,但是不能把88直接往后挪一个位置,因为这样就把99给覆盖了,所以我们应该从后往前挪。先把100往后挪一个位置。

再把99往后挪一个位置

再把88往后挪一位

此时就可以插入元素77到data[1]了

当然,完成以上过程后,size需要加1,保证size指向下一个没有元素的位置。

代码演示

继续编码,实现以上的过程,编写向所有元素后添加一个新元素的方法和在第index个位置插入一个元素e的方法。

public class Array {

    private int[] data;
    private int size;

    // 构造函数,传入数组的容量capacity构造Array
    public Array(int capacity){
        data = new int[capacity];
        size = 0;
    }

    // 无参数的构造函数,默认数组的容量capacity=10
    public Array(){
        this(10);
    }

    // 获取数组的容量
    public int getCapacity(){
        return data.length;
    }

    // 获取数组中的元素个数
    public int getSize(){
        return size;
    }

    // 返回数组是否为空
    public boolean isEmpty(){
        return size == 0;
    }

    // 向所有元素后添加一个新元素
    public void addLast(int e){

//        if(size == data.length)
//            throw new IllegalArgumentException("AddLast failed. Array is full.");
//
//        data[size] = e;
//        size ++;
        add(size, e);
    }

    // 在所有元素前添加一个新元素
    public void addFirst(int e){
        add(0, e);
    }

    // 在index索引的位置插入一个新元素e
    public void add(int index, int e){

        if(size == data.length)
            throw new IllegalArgumentException("Add failed. Array is full.");

        if(index < 0 || index > size)
            throw new IllegalArgumentException("Add failed. Require index >= 0 and index <= size."); for(int i = size - 1; i >= index ; i --)
            data[i + 1] = data[i];

        data[index] = e;

        size ++;
    }

}

源码下载

下载地址

导航目录

查看导航
丨极客文库, 版权所有丨如未注明 , 均为原创丨
本网站采用知识共享署名-非商业性使用-相同方式共享 3.0 中国大陆许可协议进行授权
转载请注明原文链接:数据结构笔记总结(1.3)向数组中添加元素
喜欢 (0)
[247507792@qq.com]
分享 (0)
Geekerstar
关于作者:
本站技术支持

您必须 登录 才能发表评论!

  • 精品技术教程
  • 编程资源分享
  • 问答交流社区
  • 极客文库知识库

客服QQ


QQ:2248886839


工作时间:09:00-23:00