当前位置: 首页 > news >正文

中国建设教育协会网站证书百度最贵关键词排名

中国建设教育协会网站证书,百度最贵关键词排名,做互联网交易网站的条件,茶文化网站建设内容先给大家看一下关系图以免大家一头雾水找不着北: 1.不少人对ArrayList集合的底层代码存在误区(包括一些面试官) 误区1:ArrayList集合的底层是数组结构的,数组默认长度为10。 误区2:当数组添加满了之后会自动扩容为1.…

先给大家看一下关系图以免大家一头雾水找不着北:

654d26e0dfd14376ad0d193f0cc7065c.png

 1.不少人对ArrayList集合的底层代码存在误区(包括一些面试官)

误区1:ArrayList集合的底层是数组结构的,数组默认长度为10。

误区2:当数组添加满了之后会自动扩容为1.5倍。(标红的就代表错误)

正确的ArrayList底层原理:

正解1:利用空参构造创建的集合,在底层会创建一个默认长度为0的数组

正解2:在添加第一个元素时,底层会创建一个新的长度为10的数组,此时数组中所有元素都为null

元素的值nullnullnullnullnullnullnullnullnullnull
index0123456789

 正解3:当这十个元素存满了,数组会自动扩容(扩容时会创建一个新的数组,长度为老数组的1.5倍,再拷贝老数组的所有元素到新数组)

正解4:如果一次添加多个元素,即使扩容1.5倍也存不下,新创建的数组长度会以实际为准。

 

源码剖析:(打开idea跟着我做,你一定可以学会看源码)

先假设我们要调用add方法list.add("xxx"),后面你要拿着里面的元素带入到方法内部

Ctrl+N在搜索框输入"ArrayList"回车,一定要是uil包下的

public ArrayList() {this.elementData = DEFAULTCAPACITY_EMPTY_ELEMENTDATA;Ctrl+鼠标左键单击跟进
}
private static final Object[] DEFAULTCAPACITY_EMPTY_ELEMENTDATA = {};

{}表示DEFAULTCAPACITY_EMPTY_ELEMENTDATA是一个空数组,表示默认长度为0。elementDataArrayList 用来存储元素的数组。

Alt+数字键7展开ArrayList所有方法,找到两个add方法

public boolean add(E e) {modCount++;  // 1. 增加修改计数器,以便在集合被修改时进行监控。add(e, elementData, size);  // 2. 调用私有的 `add` 方法,将元素 `e` 添加到 `elementData` 数组中。return true;  // 3. 返回 `true` 表示元素已成功添加。
}
private void add(E e, Object[] elementData, int s) {if (s == elementData.length)  // 1. 检查是否需要扩容。elementData = grow();  // 2. 如果需要扩容,调用 `grow` 方法扩展数组。elementData[s] = e;  // 3. 将新元素 `e` 放入 `elementData` 数组的正确位置。size = s + 1;  // 4. 更新集合的大小(`size`)。
}

Ctrl+鼠标左键单击跟进找到两个grow方法

private Object[] grow() {return grow(size + 1);  // 1. 调用带有最小容量参数的 `grow` 方法,传入 `size + 1` 作为新的最小容量。
}
private Object[] grow(int minCapacity) {int oldCapacity = elementData.length;  // 1. 获取当前数组的容量。if (oldCapacity > 0 || elementData != DEFAULTCAPACITY_EMPTY_ELEMENTDATA) {int newCapacity = ArraysSupport.newLength(oldCapacity,minCapacity - oldCapacity, /* minimum growth */oldCapacity >> 1           /* preferred growth */);  // 2. 计算新的容量。注意!这里的右移符号>>就是1.5倍扩容的关键,右移一次就除以2,假设老容量到达了10,10/2就是默认oldCapacity新增容量的大小5!!!,新增完之后新数组newCapacity的大小就变成了原来的1.5倍即15!!!return elementData = Arrays.copyOf(elementData, newCapacity);  // 3. 创建一个新数组,并复制旧数组的元素。} else {return elementData = new Object[Math.max(DEFAULT_CAPACITY, minCapacity)];  // 4. 如果数组是空的,则创建一个具有默认最小容量的新数组。}
}

Ctrl+鼠标左键单击跟进找到newLength方法

public static int newLength(int oldLength, int minGrowth, int prefGrowth) {// 定义一个静态方法,用于根据旧长度、最小增长量和首选增长量计算新的长度。int prefLength = oldLength + Math.max(minGrowth, prefGrowth); // 计算首选长度,即将 oldLength 加上 minGrowth 和 prefGrowth 中的较大值; 这个计算可能会导致整数溢出。if (0 < prefLength && prefLength <= SOFT_MAX_ARRAY_LENGTH) { // 检查首选长度是否为正数且在允许的最大长度范围内。return prefLength; // 如果首选长度在范围内,则返回这个首选长度。} else {return hugeLength(oldLength, minGrowth); // 如果首选长度超出了范围,则调用另一个方法来确定一个更大的有效长度。}
}

相信你一定能看懂!
好了,今天的学习就到这了,如果看不懂源码的一定要一步一步推导,别着急一下看完,学习应该是以进步为目的的,三分钟的进步胜过别人24小时的原地踏步,只要有进步,就算没有理想那也不叫咸鱼,加油!

 

                  

 

http://www.hkea.cn/news/940054/

相关文章:

  • 谁做网站市场营销专业
  • 慈溪外贸公司网站网络营销就业前景和薪水
  • 电商网站建设实训报告长沙网站seo推广公司
  • 阿里云ecs怎么建网站吉林网站seo
  • 企业营销型网站建设的可行性西安竞价托管
  • 做网站如何适应分辨率网站分析培训班
  • 现在币圈有那些私募网站做的好百度推广账号登陆入口
  • 旅游网站图片营销公司排名
  • 做服务器的网站都有哪些搜狗关键词排名此会zjkwlgs
  • php动态网站开发 唐四薪 答案b站引流推广网站
  • 长沙3天2晚自由行攻略论述搜索引擎优化的具体措施
  • 外汇局网站做结汇申报被逆冬seo课程欺骗了
  • 网站运营配置免费网站在线观看人数在哪直播
  • 什么网站做一手房好系统优化的例子
  • wordpress 插入wordseo排名点击工具
  • 网站推广易网宣seo的主要分析工具
  • 安徽网站定制最大免费广告发布平台
  • 怎么查网站有没有做404公司宣传网页怎么做
  • 靠谱营销网站开发选哪家seo的优点和缺点
  • 企业网站建设论文文献综述百度推广的广告真实可信吗
  • 企业网站优化方式广州最新消息今天
  • 旅游网站开发的意义seo优化方案案例
  • 山东做网站的公司seo数据分析哪些方面
  • 做网站用哪几个端口 比较好百度贴吧官网网页
  • 弹幕网站是怎么做的百度在线翻译
  • 独立网站域名代发关键词包收录
  • 如何建立门户网站百度可以发布广告吗
  • 网站开发毕设文献郑州网站优化顾问
  • 青海建设银行的官方网站自己制作网页的网站
  • 网站建设的图片叠加步骤过程2021年搜索引擎排名