破壳AI

  • 编程入门
    • C语言
    • 数据结构及算法基础
  • 应用程序开发
    • C++
    • Windows API编程
    • opengl图形编程
  • 计算机科学与Web
    • Python
    • 编程语言学
    • 信息理论
    • 人工智能
  • 计算机原理
    • 汇编
    • 系统编程
    • 操作系统
    • 编译原理
    • 网络
  • 杂谈
  • 其他
    • 关于
    • 友链
    • 支持小站
    • 留言
    • 订阅
Focus - Keep things simple
  1. 首页
  2. 编程入门
  3. 数据结构及算法基础
  4. 正文

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

2020-11-26 635点热度 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

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

检查您的收件箱或垃圾邮件文件夹以确认您的订阅。

相关文章

  • 动态数组—C语言数据结构实现
  • 数据结构与算法基础-C语言实践 01:(函数与递归)
本作品采用 知识共享署名 4.0 国际许可协议 进行许可
标签: Java
最后更新:2021-10-14

古月弧

保持专注,持续进步。

打赏 点赞
下一篇 >

文章评论

取消回复

文章目录
  • 提示
公告

网站注册

微信公众号

最新 热点 随机
最新 热点 随机
动态数组—C语言数据结构实现 Ubuntu Linux安装VMware Tools详细排错纠察教程 C语言练手小程序-ACLLib界面程序开发 Git中合并多个提交的方法总结 将本地文件推送到GitHub上 C语言学习路径 Manjaro Linus 安装完成后如何配置
机器与人类视觉能力的差距C++之父Bjarne Stroustrup:简单的表述方式才是最优的方案到底该不该用 C++ 异常?测量一段代码的执行时间的常见方法现代 C++:一文读懂智能指针现代 C++:Lambda 表达式现代 C++:自动类型推导
计算机科学概论 (第12版 )格伦·布鲁克希尔 高清[带书签] PDF 电子书 吴恩达机器学习作业Python3实现(四):神经网络及其反向传播 计算机领域共同学习路线,诚邀加入 为什么说 Node.js 是实时应用程序开发的绝佳选择 兄弟连Linux视频教程之bilibili评论区总结 吴恩达机器学习作业Python3实现(五):方差和偏差及学习曲线绘制 什么是“脚本语言”

COPYRIGHT © 2019-2022 破壳AI. ALL RIGHTS RESERVED.

Theme Kratos Made By Seaton Jiang

浙ICP备19036001号