Java语言中,为什么数组只能储存一种类型的数据?
最近学习数据结构,在网上看到对数组这样描述:
优点:
1、按照索引查询元素速度快
2、按照索引遍历数组方便
缺点:
1、数组的大小固定后就无法扩容了
2、数组只能存储一种类型的数据
3、添加,删除的操作慢,因为要移动其他的元素。
我想问的是,为什么数组的大小固定后就无法扩容了,为什么只能储存一种数据类型。
请大佬指点!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
1.为什么数组的大小固定后就无法扩容了
这个很好解释。假如数据大小可以无限扩容,一个无限循环往数组加元素,内存达到触发gc的条件,触发gc,jvm还无法回收这些垃圾,因为都有引用,最终服务挂掉。所以需要限制。按需分配
2.为什么只能储存一种数据类型。
假如能存多种类型,每个位置的类型就很难判断,实现成本大大提升。并且数组就是失去了排序,比较的意义。
个人理解,勿喷。 这是因为系统需要为变量分配存储空间,任一变量在定义时必须指定大小,这样可以确保未分配内存空间连续、提升内存空间效率;数组只能储存一种数据类型则是方便存取操作,此外不同数据类型在存储中占用的空间长度也不同。
arr[] a = new arr[]{1,2,3};
这个数组占了内存中的前三个位置,假设第四个位置已经有其他数据了,如果给数组扩容的话,就会覆盖掉第四个位置中的内容。在java中是没问题的
可以从以下几个方面去解释吧:
Random Access
。byte
,如果你不记录,当你取用的时候,你怎么知道他是byte
类型呢,而不是char
呢。所以说只存一种数据简单纯粹。另外扩容问题,假设你申明了
int[10]
,那么JVM
会分配40个字节的空间,然后一段时间后,这40个字节空间的后面被其他对象占了,如果你原地扩容,那不把其他的对象改写了么。