声明:本栏目所使用的素材都是凯哥学堂VIP学员所写,学员有权匿名,对文章有最终解释权;凯哥学堂旨在促进VIP学员互相学习的基础上公开笔记。
System.arraycopy:
1.数组对象
2.从第几个下表开始拷贝
3.接受的数组对象
4.从第几个下表开始存放
5.要拷贝多长
使用System.arraycopy();拷贝方法,拷贝数组的参数,提高代码的执行效率。
改善集合每次new对象问题,不要每次传进参数都要new对象,所以我们在第一次创建对象数组时长度就为5,如果本次只传4-5个数据的话那就不需要重新new数组。然后创建一个属性index=0,然后objs[index++]=value;后加加,第一个值等于传进来的val;
问一下现在的数组长度是否能存储当前值,不能存储的话就重新new一个数组,长度是原来数组的1.75倍,新数组创建完成后就拷贝老数组的数据,从老数组的第0个下表,拷贝给新数组,新数组的第0个放,老数组有多长就拷贝多长,拷贝完成后覆盖老数组,让属性指向新数组。
然后objs[index++]=val;赋值。
get:用下表得到存放的数据,给一个下表判断是否大于等于index(存储下标后加加),大于就说明下标越界了。
size:数组存放数据的长度。反馈出去。
数组的删除:数组的删除就是覆盖。
比如我们申请一个数组,数组里面有“A”,“B”,“C”“D”,“E”,“F”,“G”。
假设我们要删除下标为3里面的数据,就犹如把“E”,“F”,“G”,复制一份粘贴在从 下标3开始的数组内。删除最后一个就直接数组长度减减。
判断下标是否越界,是越界的话直接抛出越界异常。
下标没越界的情况下询问它是不是要删除最后一个,是删除最后一个把该下标等于空。数组长度是7的话,减减后就是6,也就是数组对应的下标6,应为数组下标从0开始。(因为java在没有内存地址指向引用的情况下才会回收内存)
删除第一个的话,就是用System.arrycopy();老数组从下标第i+1个开始拷贝,拷贝给当前自己数组第i个(要删除的位置),拷贝长度是老数组长度减去-i-1的长度。
测试:移除第一个。
缩存储容器:请问当前objs.length/index>=3,符合的话就新申请一个数组,数组长度是来数组的2分之一,然后将老数组的第0个开始拷贝给新数组的0个,老数组有多长就放多长。(长度能被3整除删除一半的数组长度)
网友评论