摘自百科上的一句话
程序设计语言中,数组元素在内存中是一个接着一个线性存放的,通过第一个元素就能访问随后的元素,这样的数组称之为"真数组"。
实现了真数组为Java语言健壮性的特点之一。
问题有两个:
1."真数组"的概念是否如上所说,那么对应的"伪数组"如何表达?
2."真数组"是Java语言健壮性的特点体现在哪?
摘自百科上的一句话
程序设计语言中,数组元素在内存中是一个接着一个线性存放的,通过第一个元素就能访问随后的元素,这样的数组称之为"真数组"。
实现了真数组为Java语言健壮性的特点之一。
问题有两个:
1."真数组"的概念是否如上所说,那么对应的"伪数组"如何表达?
2."真数组"是Java语言健壮性的特点体现在哪?
个人理解:Java中的数组中的数据是连续存储在一块内存中的,所以可以通过下标(即偏移量)的方式访问;假数组,例如Python里面的list,访问方式同Java的数组一样,但是他在内存中并非连续。
至于体现健壮性,自己悟吧,我也不知道什么是健壮性
第一次听说真数组,不过听过为伪数组,就像是前面同学说的,JavaScript的数组就是典型的伪数组。不过非要说真数组的话,你看的那个百科里的解释应该也算对。
但是说到数组,还有一个多维数组,它在不同的语言里实现也不一样,比如在C++里面,多维数组在内存里是连续的,但是在java里,多维数组的每一维在内存里很可能不是连续的。所以这个了解了就好,没有必要细究。
关于健壮性,没啥感觉。。。
15 回答8.1k 阅读
8 回答6.3k 阅读
1 回答4.1k 阅读✓ 已解决
3 回答2.2k 阅读✓ 已解决
2 回答3.1k 阅读
2 回答3.8k 阅读
1 回答2.1k 阅读✓ 已解决
提供一篇博客解释js中的伪数组
js的伪数组
我的理解:
ADT(abstract data type)数据抽象类型:一个数据模型及定义在该模型上的一组运算。
数组是一种抽象的数据类型,Java中数组是对象,它所包含的数据在内存中是连续排列的,并且你可以对数组进行一系列的操作。
关于边界检查
所以C/C++中不检查数组越界应该是为了提高效率。
Java中存在对数组下标的检查,如果数组越界将会抛出异ArrayIndexOutOfBoundsException,数组越界会对内存中其他的数据产生覆盖,造成程序崩溃,这样提高了程序的健壮性。
写的有点乱,有错误指出希望大家指出来,谢谢大家的回答。
总感觉还是有问题!
2016年2月17日12:28:45 修改
数组定义(维基百科)
Java中的数组与C/C++并无区别,至于ArrayList底层也是通过数组实现的。
数组特性(维基百科)
根据以上总结:
真数组:
在内存中连续分配。
数组所存在的内存空间为数组专用,避免了数据被覆盖的问题。
数组内存放的类型是确定的,唯一的。
伪数组具体看首行的博客,这里把里面的一个例子贴出来