深入学习Java:关于List下标越界源码分析
之前一直认为只有数组才会出现ArrayIndexOutOfBoundsException数组下标越界异常,而ArrayList就算为空,ArrayList.get(0)也是会返回null。今天忽然发现,ArrayList也会抛越界异常IndexOutOfBoundsException,细心的同学可能发现这两个异常还是有区别的。
ArrayList下标越界异常
特意测试了一下数组与ArrayList,并记录下来:
1.数组在它的容量范围内,取值不会抛异常,返回null,只有不在容量分为内取值才会抛越界异常ArrayIndexOutOfBoundsException。
数组在它的容量范围内,取值不会抛异常
数组下标越界异常
2.ArrayList就算初始化了容量,但当取得下标没有元素时也会抛异常IndexOutOfBoundsException。当我们查看ArrayList的get方法时会发现,当获取的下标大于或等于size,则会抛出IndexOutOfBoundsException异常。
ArrayList的get方法源码
下标大于或等于size,抛出异常
3.ArrayList中维护着一个数组,如果不是这里限制了,应该是跟数组一样,在它的容量范围内,取值不会抛异常。
ArrayList中维护着一个数组
ArrayList的get方法源码
ArrayList的get方法最终是数组取值
4.ArrayList.get(-1)不会触发前面的IndexOutOfBoundsException异常,但是也不在数组容量范围内,会抛出了跟数组下标越界一样的异常ArrayIndexOutOfBoundsException。
ArrayList.get(-1)
Docker步步实践
目录文档:
①Docker简介
②基本概念
③安装Docker
④使用镜像:
⑤操作容器:
⑥访问仓库:
⑦数据管理:
⑧使用网络:
⑨高级网络配置:
⑩安全:
⑪底层实现:
⑫其他项目:
外链图片转存中…(img-2QoClwsZ-1623622389560)]
⑫其他项目:
[外链图片转存中…(img-5EGyFcDO-1623622389560)]
有需要完整版源码+笔记的朋友点击这里免费获取
深入学习Java:关于List下标越界源码分析相关推荐
- idea 线程内存_Java线程池系列之-Java线程池底层源码分析系列(一)
课程简介: 课程目标:通过本课程学习,深入理解Java线程池,提升自身技术能力与价值. 适用人群:具有Java多线程基础的人群,希望深入理解线程池底层原理的人群. 课程概述:多线程的异步执行方式,虽然 ...
- idea 线程内存_Java线程池系列之-Java线程池底层源码分析系列(二)
课程简介: 课程目标:通过本课程学习,深入理解Java线程池,提升自身技术能力与价值. 适用人群:具有Java多线程基础的人群,希望深入理解线程池底层原理的人群. 课程概述:多线程的异步执行方式,虽然 ...
- 死磕 java集合之ArrayDeque源码分析
问题 (1)什么是双端队列? (2)ArrayDeque是怎么实现双端队列的? (3)ArrayDeque是线程安全的吗? (4)ArrayDeque是有界的吗? 简介 双端队列是一种特殊的队列,它的 ...
- Ceph 学习——OSD读写流程与源码分析(一)
消息从客户端发送而来,之前几节介绍了 客户端下 对象存储.块存储库的实现以及他们在客户端下API请求的发送过程(Ceph学习--Librados与Osdc实现源码解析 . Ceph学习--客户端读写操 ...
- 【死磕 Java 集合】— LinkedTransferQueue源码分析
[死磕 Java 集合]- LinkedTransferQueue源码分析 问题 (1)LinkedTransferQueue是什么东东? (2)LinkedTransferQueue是怎么实现阻塞队 ...
- 死磕Java集合之BitSet源码分析(JDK18)
死磕Java集合之BitSet源码分析(JDK18) 文章目录 死磕Java集合之BitSet源码分析(JDK18) 简介 继承体系 存储结构 源码解析 属性 构造方法 set(int bitInde ...
- java arraydeque_死磕 java集合之ArrayDeque源码分析
问题 (1)什么是双端队列? (2)ArrayDeque是怎么实现双端队列的? (3)ArrayDeque是线程安全的吗? (4)ArrayDeque是有界的吗? 简介 双端队列是一种特殊的队列,它的 ...
- Java的wait()、notify()学习三部曲之一:JVM源码分析
原文链接:https://blog.csdn.net/boling_cavalry/article/details/77793224 综述 Java的wait().notify()学习三部曲由三篇文章 ...
- java bufferedwrite_Java BufferedWriter BufferedReader 源码分析
一:BufferedWriter 1.类功能简介: BufferedWriter.缓存字符输出流.他的功能是为传入的底层字符输出流提供缓存功能.同样当使用底层字符输出流向目的地中写入字符或者字符数组时 ...
- Java集合:Hashtable源码分析
1. 概述 上次讨论了HashMap的结构,原理和实现,本文来对Map家族的另外一个常用集合HashTable进行介绍.HashTable和HashMap两种集合非常相似,经常被各种面试官问到两者的区 ...
最新文章
- php 一行代码解决二维数组去重
- ORACLE SQL语句总结2
- linuex查看繁忙_如何用九条命令在一分钟内检查Linux服务器性能?
- snmp 获取 虚拟机硬盘_服务器出故障了怎么办?SNMP告警七步走
- 通过pycharm启动django
- Qt Designer手册
- JS正则表达式验证账号、手机号、电话和邮箱
- 中位数及带权中位数问题(转)
- Framework4.0 IIS7下urlrewriter设置问题
- java restlet 教程_Restlet 2.0 边学边写(五)Restlet的POST、PUT和DELETE
- android packages/apps 加入工程,深入安卓Package Manager和Package Installer
- 阿泰,水晶报表--push样式模板
- 推荐 :你要的用户画像实践来了!
- excel表格xlsx解密方法,忘记excel表格xlsx密码怎么办?
- matlab怎么复数相位,怎么求复数相位
- 华为笔记本linux usb启动,华为MateBook D(2018) BIOS设置u盘启动教程
- 这个治脱发的思路,望采纳
- 干货!毫米波雷达超强解读
- SpringBoot + laypage分页 + 模糊查询
- C# Word Excel Could not load file or assembly ‘office, Version=15