Java数组最后一位怎么表示

严格来说,Java数组索引是从0开始的,最后一个数字的索引是数组长度减1
为了扩展这个规则,去年在做高端项目的时候就陷入了这个规则的深渊。
当时A菜鸟直接用n来访问最后一位。
结果,大小为 3 000 的数组直接崩溃——用行话来说,称为雪崩效应。
事实上,前面任何小的延迟都会延迟后面的一切。
还有一点是,像 ArrayList 这样的集合类的索引规则是类似的,但是它们是动态扩展的,所以使用 size()-1 更安全。
有一个非常重要的细节。
例如,如果看到代码直接使用arr[arr.length-1 ]添加一句是最好的。
我有一个项目,因为没有添加if(arr.length>0)...
一开始我以为从1 开始索引会更直观,但后来发现Java遵循C语言,兼容性更好。
等等还有一件事。
如果数组为空;如果直接使用length,会出现错误。
许多人没有注意到这个事实。

建议编码时包含空数组,以避免重写代码和故障排除。

Java数组索引为什么从0开始而不是从1开始?

Java数组从0开始。
这是因为C语言是传统的、易于计算、干净的代码,并且它的数学算法是通用的和行业标准的。

C 语言的历史,对于地址计算、代码可读性、通用数学算法、对于跨语言使用很有用。

我仍在亲自测试,但这是我的经验。
你自己掂量一下吧。

Java中的数组

说白了,Java数组就是存储固定类型数据的持久内存。
您可以使用订阅来访问课程。
它很有效,但长度很长。
首先让我们谈谈最重要的内存持久性。
去年我们做了一个竞争激烈的项目,用数组存储3 000级数据,比ArrayList至少快1 5 %,因为CPU直接跳转到地址基址,不需要像列表那样迭代搜索。
还有一点是长度是恒定的。
在去年的重建过程中,堆栈几乎爆炸了,因为要扩展其容量,您需要创建一个新数组,然后复制它,例如 int[] old = {1 ,2 ,3 }; int[] 新 = 新 int[5 ];旧 = Arrays.copyOf(旧, 5 );这个过程需要写两行,但这是一个缺点。
还有另一个关键细节。
比如二维数组matrix={{1 ,2 },{3 ,4 }}就不是3 行2 列,而是两个int[]对象。
使用matrix[1 ][0]访问是3 ,但是matrix[0]的长度是2 说实话,这很混乱。
很多人不注意这一点。

一开始我以为数组只能存储基本类型,后来发现它也可以存储String之类的东西,但是new String[3 ]创建的是三个空引用,而不是空字符串。
等等,还有别的事。
当使用Arrays.toString(arr)的输出时,仍然使用for循环遍历的内部,因此对于非常大的数组,手动遍历可以更快。

建议多练习谈判的深拷贝。
不要像去年那样直接将原始数组引用分配给新数组。
因此,当新数组元素发生变化时,原始数组也会发生变化。
花了好几天的时间来编辑。