集合List的理论最大长度(ArrayList\LinkedList)

2 篇文章 0 订阅
2 篇文章 0 订阅

集合List的理论最大长度(ArrayList\LinkedList)

1.我们先来看ArrayList的长度(不考虑内存等,理论值)

ArrayList我们都知道是数组实现的,那么数组的最大长度其实就是ArrayList的最大长度,说到这里,其实有人已经有答案了。其实我们看一下它的length属性就可以了。length属性是32位的有符号整数,它的最大值是2的31次幂,就是2G。为何有这个限制呢?为什么length的属性不是long型呢?我们假设一下,如果它是long型的,那么它的最大长度是2的63次幂。内存永远也不会有那么大吧。即使是字节数组长度是int的,最大长都达到2GB.

由此想到了String,这个家伙底层也是基于数组的,是一个字符数组。字符是16位的基本类型,一个String的最大长度是多少呢?就是字符数组的最大长度也是2G,占用内存是4GB。

一个数组最大的长度是一个 int 的最大值,也就是 2147483647(2的31次方减1),而一个字符串在 Java 内部是使用 char[] 来表示的,也就是说一个字符串的最大长度是 2147483647。

不过这些都是理论值,具体能放多少与 JVM 内存有关, 可以在执行 java 命令时加上 -Xmx 1024m 就将 JVM 内存最大置为了 1G, 默认情况下是 64MB.

可以写一个String[]死循环添加数组,消耗内存,看看会不会死机。

实际开发中,虚拟机默认内存大小根据不同的虚拟机实现有所不同,可以在启动应用时用-Xmx调整最大堆大小,比如调整堆最大大小为2G:
一般四五十万的数据是放得下的。

2.我们再来看LinkedList的长度(不考虑内存等,理论值)

linkdedList集合石链表实现的,在内存理想的情况下,理论上是可以无限的去存储元素的。

其实,不论是ArrayList还是LinkdeList,我们上面说的都是它的理论值,实际开发中都会受限与硬件的影响,在开发中,我们当时List中存放的是图片二进制流,在存储到500条数据的时候,内存就不够用了,只能重新处理,在开发中还是要注意这方面的问题。
  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值