编程进阶网编程进阶网
  • 基础组成体系
  • 程序编程原理
  • 异常和IO系统
  • 六大设计原则
  • 设计模式导读
  • 创建型设计模式
  • 结构型设计模式
  • 行为型设计模式
  • 设计模式案例
  • 面向对象思想
  • 基础入门
  • 高级进阶
  • JVM虚拟机
  • 数据集合
  • Java面试题
  • C语言入门
  • C综合案例
  • C标准库
  • C语言专栏
  • C++入门
  • C++综合案例
  • C++专栏
  • HTML
  • CSS
  • JavaScript
  • 前端专栏
  • Swift
  • iOS入门
  • 基础入门
  • 开源库解读
  • 性能优化
  • Framework
  • 方案设计
  • 媒体音视频
  • 硬件开发
  • Groovy
  • 常用工具
  • 大厂面试题
  • 综合案例
  • 网络底层
  • Https
  • 网络请求
  • 故障排查
  • 专栏
  • 数组
  • 链表
  • 栈
  • 队列
  • 树
  • 递归
  • 哈希
  • 排序
  • 查找
  • 字符串
  • 其他
  • Bash脚本
  • Linux入门
  • 嵌入式开发
  • 代码规范
  • Markdown
  • 开发理论
  • 开发工具
  • Git管理
  • 百宝箱
  • 开源协议
  • 技术招聘
  • 测试经验
  • 职场提升
  • 技术模版
  • 关于我
  • 目标清单
  • 学习框架
  • 育儿经验
  • 我的专栏
  • 底层能力
  • 读书心得
  • 随笔笔记
  • 职场思考
  • 中华历史
  • 经济学故事
  • 基础组成体系
  • 程序编程原理
  • 异常和IO系统
  • 六大设计原则
  • 设计模式导读
  • 创建型设计模式
  • 结构型设计模式
  • 行为型设计模式
  • 设计模式案例
  • 面向对象思想
  • 基础入门
  • 高级进阶
  • JVM虚拟机
  • 数据集合
  • Java面试题
  • C语言入门
  • C综合案例
  • C标准库
  • C语言专栏
  • C++入门
  • C++综合案例
  • C++专栏
  • HTML
  • CSS
  • JavaScript
  • 前端专栏
  • Swift
  • iOS入门
  • 基础入门
  • 开源库解读
  • 性能优化
  • Framework
  • 方案设计
  • 媒体音视频
  • 硬件开发
  • Groovy
  • 常用工具
  • 大厂面试题
  • 综合案例
  • 网络底层
  • Https
  • 网络请求
  • 故障排查
  • 专栏
  • 数组
  • 链表
  • 栈
  • 队列
  • 树
  • 递归
  • 哈希
  • 排序
  • 查找
  • 字符串
  • 其他
  • Bash脚本
  • Linux入门
  • 嵌入式开发
  • 代码规范
  • Markdown
  • 开发理论
  • 开发工具
  • Git管理
  • 百宝箱
  • 开源协议
  • 技术招聘
  • 测试经验
  • 职场提升
  • 技术模版
  • 关于我
  • 目标清单
  • 学习框架
  • 育儿经验
  • 我的专栏
  • 底层能力
  • 读书心得
  • 随笔笔记
  • 职场思考
  • 中华历史
  • 经济学故事
  • 01.用类实现一维数组
  • 02.从数组中删除重复项
  • 03.啤酒与饮料
  • 04.二维数组中查找
  • 05.数组中重复的数字
  • 06.和为s的两个数字
  • 07.数组中只出现一次数字
  • 08.数组中只出现一次的数字
  • 09.买卖股票最佳时机
  • 10.调整数组顺序
  • 11.找出常用的数字
  • 12.旋转数组的最小数字
  • 13.调整数组顺序使奇数位于偶数前面
  • 14.顺时针打印矩阵
  • 15.数组中出现次数超过一半的数字
  • 16.最小的k个数
  • 17.连续子数组的最大和
  • 18.把数组排成最小的数
  • 19.数组中的逆序对
  • 20.在排序数组中出现的次数
  • 21.滑动窗口的最大值

01.用类实现一维数组

目录介绍

  • 01.数组的介绍
  • 02.用类封装数组

好消息

  • 博客笔记大汇总【15年10月到至今】,包括Java基础及深入知识点,Android技术博客,Python学习笔记等等,还包括平时开发中遇到的bug汇总,当然也在工作之余收集了大量的面试题,长期更新维护并且修正,持续完善……开源的文件是markdown格式的!同时也开源了生活博客,从12年起,积累共计N篇[近100万字,陆续搬到网上],转载请注明出处,谢谢!所有博客陆续更新到GitHub上!
  • 链接地址:https://github.com/yangchong211/YCBlogs
  • 如果觉得好,可以star一下,谢谢!当然也欢迎提出建议,万事起于忽微,量变引起质变!

01.数组的介绍

1.1 数组的声明

  • 第一种方式:
    • 数据类型 [] 数组名称 = new 数据类型[数组长度];   - 这里 [] 可以放在数组名称的前面,也可以放在数组名称的后面,我们推荐放在数组名称的前面,这样看上去 数据类型 [] 表示的很明显是一个数组类型,而放在数组名称后面,则不是那么直观。
  • 第二种方式:
    • 数据类型 [] 数组名称 = {数组元素1,数组元素2,......}
    • 这种方式声明数组的同时直接给定了数组的元素,数组的大小由给定的数组元素个数决定。
    //声明数组1,声明一个长度为3,只能存放int类型的数据
    int [] myArray = new int[3];
    //声明数组2,声明一个数组元素为 1,2,3的int类型数组
    int [] myArray2 = {1,2,3};

1.2 访问数组元素以及给数组元素赋值

  • 数组是存在下标索引的,通过下标可以获取指定位置的元素,数组小标是从0开始的,也就是说下标0对应的就是数组中第1个元素,可以很方便的对数组中的元素进行存取操作。
  • 前面数组的声明第二种方式,我们在声明数组的同时,也进行了初始化赋值。
    //声明数组,声明一个长度为3,只能存放int类型的数据
    int [] myArray = new int[3];
    //给myArray第一个元素赋值1
    myArray[0] = 1;
    //访问myArray的第一个元素
    System.out.println(myArray[0]);
  • 上面的myArray 数组,我们只能赋值三个元素,也就是下标从0到2,如果你访问 myArray[3] ,那么会报数组下标越界异常。

02.用类封装数组

  • 思考一下,需要实现那些功能
    • ①、如何插入一条新的数据项
    • ②、如何寻找某一特定的数据项
    • ③、如何删除某一特定的数据项
    • ④、如何迭代的访问各个数据项,以便进行显示或其他操作
  • 代码实现如下所示
    public class MyArray {
        //定义一个数组
        private int [] intArray;
        //定义数组的实际有效长度
        private int elems;
        //定义数组的最大长度
        private int length;
         
        //默认构造一个长度为50的数组
        public MyArray(){
            elems = 0;
            length = 50;
            intArray = new int[length];
        }
        //构造函数,初始化一个长度为length 的数组
        public MyArray(int length){
            elems = 0;
            this.length = length;
            intArray = new int[length];
        }
         
        //获取数组的有效长度
        public int getSize(){
            return elems;
        }
         
        /**
         * 遍历显示元素
         */
        public void display(){
            for(int i = 0 ; i < elems ; i++){
                System.out.print(intArray[i]+" ");
            }
            System.out.println();
        }
         
        /**
         * 添加元素
         * @param value,假设操作人是不会添加重复元素的,如果有重复元素对于后面的操作都会有影响。
         * @return添加成功返回true,添加的元素超过范围了返回false
         */
        public boolean add(int value){
            if(elems == length){
                return false;
            }else{
                intArray[elems] = value;
                elems++;
            }
            return true;
        }
         
        /**
         * 根据下标获取元素
         * @param i
         * @return查找下标值在数组下标有效范围内,返回下标所表示的元素
         * 查找下标超出数组下标有效值,提示访问下标越界
         */
        public int get(int i){
            if(i<0 || i>elems){
                System.out.println("访问下标越界");
            }
            return intArray[i];
        }
        /**
         * 查找元素
         * @param searchValue
         * @return查找的元素如果存在则返回下标值,如果不存在,返回 -1
         */
        public int find(int searchValue){
            int i ;
            for(i = 0 ; i < elems ;i++){
                if(intArray[i] == searchValue){
                    break;
                }
            }
            if(i == elems){
                return -1;
            }
            return i;
        }
        /**
         * 删除元素
         * @param value
         * @return如果要删除的值不存在,直接返回 false;否则返回true,删除成功
         */
        public boolean delete(int value){
            int k = find(value);
            if(k == -1){
                return false;
            }else{
                if(k == elems-1){
                    elems--;
                }else{
                    for(int i = k; i< elems-1 ; i++){
                        intArray[i] = intArray[i+1];
                       
                    }
                     elems--;
                }
                return true;
            }
        }
        /**
         * 修改数据
         * @param oldValue原值
         * @param newValue新值
         * @return修改成功返回true,修改失败返回false
         */
        public boolean modify(int oldValue,int newValue){
            int i = find(oldValue);
            if(i == -1){
                System.out.println("需要修改的数据不存在");
                return false;
            }else{
                intArray[i] = newValue;
                return true;
            }
        }
    }
  • 测试一下
    public static void main(String[] args) {
        //创建自定义封装数组结构,数组大小为4
        MyArray array = new MyArray(4);
        //添加4个元素分别是1,2,3,4
        array.add(1);
        array.add(2);
        array.add(3);
        array.add(4);
        //显示数组元素
        array.display();
        //根据下标为0的元素
        int i = array.get(0);
        System.out.println(i);
        //删除4的元素
        array.delete(4);
        //将元素3修改为33
        array.modify(3, 33);
        array.display();
    }

其他内容

01.关于博客汇总链接

  • 1.技术博客汇总
  • 2.开源项目汇总
  • 3.生活博客汇总
  • 4.喜马拉雅音频汇总
  • 5.其他汇总

02.关于我的博客

  • github:https://github.com/yangchong211
  • 知乎:https://www.zhihu.com/people/yczbj/activities
  • 简书:http://www.jianshu.com/u/b7b2c6ed9284
  • csdn:http://my.csdn.net/m0_37700275
  • 喜马拉雅听书:http://www.ximalaya.com/zhubo/71989305/
  • 开源中国:https://my.oschina.net/zbj1618/blog
  • 泡在网上的日子:http://www.jcodecraeer.com/member/content_list.php?channelid=1
  • 邮箱:yangchong211@163.com
  • 阿里云博客:https://yq.aliyun.com/users/article?spm=5176.100- 239.headeruserinfo.3.dT4bcV
  • segmentfault头条:https://segmentfault.com/u/xiangjianyu/articles
  • 掘金:https://juejin.im/user/5939433efe88c2006afa0c6e
贡献者: yangchong211
下一篇
02.从数组中删除重复项