最近学习数据结构,在网上看到对数组这样描述:
优点:
1、按照索引查询元素速度快
2、按照索引遍历数组方便
缺点:
1、数组的大小固定后就无法扩容了
2、数组只能存储一种类型的数据
3、添加,删除的操作慢,因为要移动其他的元素。
我想问的是,为什么数组的大小固定后就无法扩容了,为什么只能储存一种数据类型。
请大佬指点!
最近学习数据结构,在网上看到对数组这样描述:
优点:
1、按照索引查询元素速度快
2、按照索引遍历数组方便
缺点:
1、数组的大小固定后就无法扩容了
2、数组只能存储一种类型的数据
3、添加,删除的操作慢,因为要移动其他的元素。
我想问的是,为什么数组的大小固定后就无法扩容了,为什么只能储存一种数据类型。
请大佬指点!
个人理解,勿喷。 这是因为系统需要为变量分配存储空间,任一变量在定义时必须指定大小,这样可以确保未分配内存空间连续、提升内存空间效率;数组只能储存一种数据类型则是方便存取操作,此外不同数据类型在存储中占用的空间长度也不同。
arr[] a = new arr[]{1,2,3};
这个数组占了内存中的前三个位置,假设第四个位置已经有其他数据了,如果给数组扩容的话,就会覆盖掉第四个位置中的内容。Object[] arr = new Object[3];
arr[0] = 1;
arr[1] = "aa";
arr[2] = true;
在java中是没问题的
1.为什么数组的大小固定后就无法扩容了
这个很好解释。假如数据大小可以无限扩容,一个无限循环往数组加元素,内存达到触发gc的条件,触发gc,jvm还无法回收这些垃圾,因为都有引用,最终服务挂掉。所以需要限制。按需分配
2.为什么只能储存一种数据类型。
假如能存多种类型,每个位置的类型就很难判断,实现成本大大提升。并且数组就是失去了排序,比较的意义。
10 回答11k 阅读
15 回答8.3k 阅读
8 回答6.2k 阅读
1 回答4k 阅读✓ 已解决
3 回答6k 阅读
3 回答2.2k 阅读✓ 已解决
2 回答3.1k 阅读
可以从以下几个方面去解释吧:
Random Access
。byte
,如果你不记录,当你取用的时候,你怎么知道他是byte
类型呢,而不是char
呢。所以说只存一种数据简单纯粹。另外扩容问题,假设你申明了
int[10]
,那么JVM
会分配40个字节的空间,然后一段时间后,这40个字节空间的后面被其他对象占了,如果你原地扩容,那不把其他的对象改写了么。