漫画算法之『数组』-Java演示

2020-11-26 418点热度 1人点赞 0条评论

寻找志同道合的学习伙伴,请访问我的个人网页.
该内容同步发布在CSDN耳壳网.

提示

数组的插入、扩容、删除等操作

/**
 * 数组 - 基本操作
 * @author Guyuehu
 *
 */
public class Main {
    public static void main(String[] args) throws Exception {
        MyArray arrayTest = new MyArray(4);
        arrayTest.insert(0, 6);
        arrayTest.insert(1, 10);
        arrayTest.insert(2, 0);
        arrayTest.insert(3, 7);
        //arrayTest.insert(1, 100);
        arrayTest.insertOutBounds(1, 100);
        arrayTest.delete(2);
        arrayTest.delete(3);
        arrayTest.output();
    }
}

/**
 * 创建数组类
 * @author Guyuehu
 *
 */
class MyArray {
    private int[] array;
    private int size;

    public MyArray(int capacity) {
        this.array = new int[capacity];
        this.size = 0;
    }

    /**
     * 从数组中间插入元素
     * @param  index    插入元素位置
     * @param  element  插入的元素
     */
    public void insert(int index, int element) throws Exception {
        //超出数组范围抛出异常
        //若index > size 插入的元素就不是顺序放在数组中了
        if(index < 0 || index > size) {
            throw new IndexOutOfBoundsException("超出数组实际元素范围!");
        }
        //从后往前直到inedex位置依次往后移一位
        for(int i = size - 1; i >= index; i--) {
            array[i+1] = array[i];
        }
        //插入
        array[index] = element;
        size++;
    }

    /**
     *超范围插入
     */
    public void insertOutBounds(int index, int element) throws Exception {
        if(index < 0 || index > size) {
            throw new IndexOutOfBoundsException("超出数组实际元素范围!");
        }
        //数组已满,则对数组扩容
        if(size >= array.length) {
            resize();
        }
        //插入
        for(int i = size - 1; i >= index; i--) {
            array[i+1] = array[i];
        }
        //插入
        array[index] = element;
        size++;
    }

    /**
     * 数组扩容
     */
    public void resize() {
        int[] arrayNew = new int[2 * array.length];
        System.arraycopy(array, 0, arrayNew, 0, array.length);
        array = arrayNew;
    }

    /**
     * 数组删除元素
     * @param  index    删除元素位置
     */
    public int delete(int index) throws Exception {
        if(index < 0 || index > size) {
            throw new IndexOutOfBoundsException("超出数组实际元素范围!");
        }
        int deleteElement = array[index];
        for(int i = index; i < size - 1; i++) {
            array[i] = array[i+1];
        }
        //size-- 很重要,时刻保持与现存数组元素个数等长  
        size--;
        return deleteElement;
    }

    /**
     * 输出数组
     */
    public void output() {
        for(int i = 0; i < size; i++) {
            System.out.println(array[i]);
        }
    }

}

寻找志同道合的学习伙伴,请访问我的个人网页.
该内容同步发布在CSDN耳壳网.

订阅博客,及时获取文章更新邮件通知

close

订阅博客,及时获取文章更新邮件通知

古月弧

保持专注,持续进步。

文章评论

您需要 登录 之后才可以评论