前言


数组的特点:

  1. 数组是相同数据类型的元素的集合。
  2. 数组中的各元素的存储是有先后顺序的,它们在内存中按照这个先后顺序连续存放在一起。
  3. 数组元素用整个数组的名字和它自己在数组中的顺序位置来表示。例如,a[0]表示名字为a的数组中的第一个元素,a[1]代表数组a的第二个元素,以此类推。

用java代码对数组实现以下操作:

  1. 读取元素
  2. 更新元素
  3. 插入元素
  4. 删除元素

代码实现

package 第二章;

public class No2_1 {
    // 定义一个数组类
    static class MyArray{

        // 定义一个私有数组及数组大小
        private int[] array;
        private int size;

        /**
         * 初始化函数
         * @param capacity 初始化数组的大小
         */
        public MyArray(int capacity){
            this.array = new int[capacity];
            size = 0;
        }

        /**
         * 查询元素
         * @param index 查询的序号
         */
        public void query(int index){
            if(index >= this.size){
                System.out.println("抱歉,您输入的序号超过数组中元素的数量!");
            }else{
                System.out.println("查询成功,该元素为:" + array[index]);
            }
        }

        /**
         * 插入数据
         * @param index 插入的位置
         * @param element 插入的元素
         * @return 失败返回0,成功返回1
         */
        public void insert(int index, int element){
            // 判断下标是否超出范围
            if(index < 0 || index > this.size){
                throw new IndexOutOfBoundsException("超出数组实际元素范围!");
            }
            // 如果实际元素达到数组容量上限,则对数组进行扩容
            if(size == array.length){
                System.out.println("超过数组长度,自动扩容一倍!");
                resize();
            }
            // 从右向左循环,将元素逐个向右挪一位
            for(int i=size-1;i>=index; i--){
                array[i+1] = array[i];
            }
            // 腾出的位置放入新元素
            array[index] = element;
            size++;
            System.out.println("插入成功!");
        }

        /**
         * 重定义数组大小,及扩容
         */
        public void resize(){
            int[] arrayNew = new int[array.length*2];
            // 调用数组复制函数,第一个参数:原数组;第二个参数:起始位置;第三个位置:新数组;第四个参数:起始位置;第五个参数:复制的长度
            System.arraycopy(array, 0, arrayNew, 0, array.length);
            array = arrayNew;
            System.out.println("新数组的容量为" + array.length);
        }

        /**
         * 输出数组
         */
        public void output(){
            System.out.println("数组的长度为:" + this.size);
            for(int i=0; i<size; i++){
                System.out.println("第" + (i+1) + "个元素为:" + array[i]);
            }
        }

        /**
         * 更新数组
         * @param index 更新的位置
         * @param element 更新的元素
         * @return
         */
        public void updata(int index, int element){
            if(index > size || index < 0){
                throw new IndexOutOfBoundsException("超出数组实际元素范围!");
            }
            array[index] = element;
            System.out.println("更新成功!");
        }

        /**
         * 删除元素
         * @param index 删除的位置
         */
        public void delete(int index){
            if(index > size || index < 0){
                throw new IndexOutOfBoundsException("超出数组实际元素范围!");
            }
            for(int i=index; i<size-1;i++){
                array[i] = array[i+1];
            }
            size--;
            System.out.println("删除成功!");
        }
    }

    public static void main(String[] args) throws Exception{
        MyArray myArray = new MyArray(4);
        myArray.insert(0, 3);
        myArray.insert(1, 7);
        myArray.insert(2, 6);
        myArray.insert(3, 9);
        myArray.insert(1, 0);
        myArray.output();
        myArray.query(1);
        myArray.updata(1, 2);
        myArray.output();
        myArray.delete(1);
        myArray.output();
    }
}

小结


数组的优点:拥有非常高的随机访问能力。
数组的缺点:插入和杀出都会移动大量元素,影响效率。

最后修改:2020 年 01 月 25 日
如果觉得我的文章对你有用,请随意赞赏