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.关于博客汇总链接
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