文章导航PC6首页软件下载单机游戏安卓资源苹果资源

pc软件新闻网络操作系统办公工具编程服务器软件评测

安卓新闻资讯应用教程刷机教程安卓游戏攻略tv资讯深度阅读综合安卓评测

苹果ios资讯苹果手机越狱备份教程美化教程ios软件教程mac教程

单机游戏角色扮演即时战略动作射击棋牌游戏乐动体育app官方下载地址竞技模拟经营其它游戏游戏工具

网游cf活动dnf活动lol周免英雄lol礼包

手游最新动态手游评测手游活动新游预告手游问答

您的位置:首页单机游戏角色扮演 → 怪物猎人世界新装备介绍 怪物猎人世界新装备新系统一览

株洲卧谡栈科贸有限公司_ArrayList原理

需要使用到动态数组的时候用的最多的就是ArrayList了,底层其实是Object数组,以下demo基于JDK1.8:

List list? = new ArrayList<>();

list.add(1);
list.add(3);
list.add(2);
list.add(4);
list.add(7);
list.add(5);
list.add(6);
list.add(2);
list.add(2);
list.add(2);
list.remove(1);

普及小知识点

length:数组的长度length是数组申请的大小,不管有没有值例如Object[] a = new Object[10];数组a的length就是10

size:是list的概念,表示list有效数组的大小,可能一开始list申请了10个大小的Object数组,然后只add了一个数,这个时候length是10,size是1

native:非java语言写的代码,dll文件

首先看add()函数

ensureCapacityInternal看数组需不需要增加保证有位置插入新的值,然后将要插入的值添加到数组中去

?

?点进去ensureCapacityInternal,其实用到了两个函数ensureExplicitCapacity,calculateCapacity,首先看calculateCapacity

?

?看函数的名字也知道计算容器空间就是数组的大小,这里的思路是数组如果为{},就初始化一个Max(10,minCapacity)个位置大小的数组,否则返回minCapacity,经过一顿骚操作后得到minCapacity,传入ensureCapacityInternal函数,就是要生成数组的函数。

然后这里modCount++,modCount是记录操作的次数,还有一个expectedModCount,后面如果对比两个值不一样的时候会抛异常(另说)

然后判断minCapacity最小容器大小是不是比原来的数组的length大,如果大继续调用grow函数

ran hou pan duan minCapacity zui xiao rong qi da xiao shi bu shi bi yuan lai de shu zu de length da, ru guo da ji xu diao yong grow han shu

grow函数也很简单记录原始数组的长度,然后新建一个数字newCapacity是原始数组长度的1.5倍(oldCapacity >> 1右移一位就是除以二),如果newCapacity比传入的minCapacity,就等于minCapacity,如果比MAX_ARRAY_SIZE大(可以理解为很大),就给它一个很大的数组空间,然后调用Arrays.copyOf()函数生成新的数组,通俗的讲就是如果你要grow数组的大小,可以我默认就给你增加到原来的1.5倍,什么你告诉我minCapacity比原来的1.5倍还要大,好那听你的用minCapacity,什么你需要申请的数组大小很大很大就给你一个huge的数组,然后我们调用Arrays.copyOf实际生成需要的数组,然后看copyOf()函数

点进去继续看return的copyOf函数

?

?

?这个函数也很简单,就是新建一个copy数组其实就是我们要生成的数组,如果newType是Object类型就新建一个Object的数组,长度是newLength(这里的newType其实就是original.class,就是原始数组的类型的class,newLength就是希望创建的数组的大小),如果原始数组不是Object的就调用Array.newInstance方法生成数组实例,点进去

继续点击进去newArray方法

其实调用的就是底层的native方法,native方法就是不是java语言写的方法,例如可能你调用的是dll文件,就是说你不是Object可能就是其他语言支持的一些类型了

然后继续往后看System.arraycopy

System.arraycopy(original, 0, copy, 0,Math.min(original.length, newLength));

点进去

其实就是一个native方法

src - 源数组。
srcPos - 源数组中的起始位置。
dest - 目标数组。
destPos - 目标数据中的起始位置。
length - 要复制的数组元素的数量。

直接调用System.arraycopy的话,这里copy的时候如果是两个不同数组还好就是copy,如果传入的是同一个数组实际是对同一个数组进行操作

总的来说就是封装了数组,让我们用起来方便一些没什么,溜了

当前文章:http://www.bglued.com/tugywdlpl/494547-820387-57296.html

发布时间:12:29:30

香港王中王正版挂牌??香港白小姐中特网??香港开奖现场直播结果??www.508555.com??香港马会最快开奖直播??今晚开码结果查询开奖??挂牌藏宝图彩图??九龙老牌图库??6869hk开奖现场??赛马会??

相关阅读 既是试金石,又是大熔炉--北京对口支援新疆脱贫攻坚纪实10个我爱你的表达,比“love u”地道100倍神木矿难幸存者家属:兄弟异常事件后弃车逃跑神木新浪财经UUUUUUUUUUUUUUUUTHQ Nordic开启周末特惠 《暗黑血统:战神版》等最低3元入手威露士消毒液/除菌液3.51L套装:有效杀灭99.999%细菌男孩偷刷上万元玩游戏,还删了消费短信“币圈首富”李笑来录音遭曝光:脏话连篇,称成功就是能忽悠傻X为增强市民爱渔护渔意识 湖南常德举办鱼类人工增殖放流活动

文章评论
发表评论

热门文章 外汇管理局:11月份中国外汇市场总额为21万亿元美国宾夕法尼亚州一所犹太教堂发生枪击案 已致8死低糖低脂低热代餐佳选,爱尔兰进口什锦即食麦片500g×3盒29元震惊!新倩女幽魂系平行世界突破玄幻网游想象极限

最新文章 12小时激辩过后,印度总理莫迪安全度过不信任动议危机时隔两年,为什么英伟达20系显卡价格如此昂贵? 清凉度夏/多色百搭,螺驰旗舰店男士纯棉直筒休闲裤49元/2条88元喜欢异世界穿越作品的多是大叔?网友:逃避现实为什么你离技术如此之近,离金钱如此之远?大疆新一轮融资方案出台:领投方瓜分定增额度

人气排行 49美元!苹果联合罗技推出廉价版iPad触控笔Crayon知名女声优悠木碧恋爱感慨引热议 想恋爱但害怕受伤虐机达人又来了!一加6T接受刀刮火烧考验:表现还不错消毒杀菌卫士,威露士消毒液3L+除菌液1L套装69元(30元券)中国首个目标飞行器天宫一号将再入大气层烧毁这款游戏让韩国游戏公司NEXON的销售额超出预期昆陵大声对周杰伦说:“孩子是前辈的礼物,你是我这辈子最喜欢的。”“玛莉亚”带来了一场考验 温州给出了这样的答案