Java语言中,为什么数组只能储存一种类型的数据?

发布于 2022-09-11 18:25:05 字数 204 浏览 17 评论 0

最近学习数据结构,在网上看到对数组这样描述:

优点:
1、按照索引查询元素速度快
2、按照索引遍历数组方便
缺点:
1、数组的大小固定后就无法扩容了
2、数组只能存储一种类型的数据
3、添加,删除的操作慢,因为要移动其他的元素。

我想问的是,为什么数组的大小固定后就无法扩容了,为什么只能储存一种数据类型。
请大佬指点!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

我三岁 2022-09-18 18:25:06

1.为什么数组的大小固定后就无法扩容了
这个很好解释。假如数据大小可以无限扩容,一个无限循环往数组加元素,内存达到触发gc的条件,触发gc,jvm还无法回收这些垃圾,因为都有引用,最终服务挂掉。所以需要限制。按需分配
2.为什么只能储存一种数据类型。
假如能存多种类型,每个位置的类型就很难判断,实现成本大大提升。并且数组就是失去了排序,比较的意义。

琴流音 2022-09-18 18:25:05

个人理解,勿喷。 这是因为系统需要为变量分配存储空间,任一变量在定义时必须指定大小,这样可以确保未分配内存空间连续、提升内存空间效率;数组只能储存一种数据类型则是方便存取操作,此外不同数据类型在存储中占用的空间长度也不同。

度的依靠╰つ 2022-09-18 18:25:05
  1. 数组的内存分配是连续的,比如arr[] a = new arr[]{1,2,3}; 这个数组占了内存中的前三个位置,假设第四个位置已经有其他数据了,如果给数组扩容的话,就会覆盖掉第四个位置中的内容。
  2. 数组只能存储一种数据是片面的吧,比如下边的代码:
Object[] arr  = new Object[3];
arr[0] = 1;
arr[1] = "aa";
arr[2] = true;

在java中是没问题的

又怨 2022-09-18 18:25:05

可以从以下几个方面去解释吧:

  1. 每种数据类型所占空间大小不同,比如char占一个字节,int占4个字节,如果数组里面存了多种数据类型,那就不方便根据索引去计算地址偏移量了,实现不了Random Access
  2. 如果你存放了多种该数据类型,那么你必须用其他的数据结构去记录哪个位置是什么类型,比如你数组的第一位放了一个byte,如果你不记录,当你取用的时候,你怎么知道他是byte类型呢,而不是char呢。所以说只存一种数据简单纯粹。

另外扩容问题,假设你申明了int[10],那么JVM会分配40个字节的空间,然后一段时间后,这40个字节空间的后面被其他对象占了,如果你原地扩容,那不把其他的对象改写了么。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文