用String存储数字是否浪费资源?ArrayList<String>存数字及数据类型效率探讨
关于用String存储数字的资源浪费及高效数据类型的问题
嘿,这个问题问到点子上了,我来给你一步步梳理清楚:
1. 用String类型ArrayList存数字会不会造成资源浪费?
绝对会。因为String本质是一个包含char数组、哈希值、偏移量等元数据的复杂对象,哪怕你只存一个数字,它也需要额外的内存来存储这些对象相关的信息,远不如直接用数值类型高效。
2. String的占用空间比int或short大吗?
必须的。咱们拿5位数字举个实际的例子(以Java为例,不同语言细节可能有差异,但核心逻辑一致):
- 一个
short基本类型只占2字节,int是4字节; - 而一个存储5位数字的
String,算上对象头(通常16字节)、存储数字的char数组(每个char占2字节,5位就是10字节),再加上偏移量、长度、哈希值这些额外字段(大概12字节),总占用大概在38字节左右——这比short大了近20倍,比int也大了快10倍!
就算用包装类Short或Integer,它们的内存开销(对象头+数值)也远小于String,比如Short大概占18字节,还是比String省很多。
3. 存储5位数字用short是不是最高效的数据类型?
这里得先划个重点:5位数字的范围是10000~99999,而short的取值范围是-32768~32767——也就是说,99999已经超过了short的最大值!如果你的5位数字包含32768及以上的数,short根本存不下,这时候必须用int。
如果你的数字范围恰好落在short的覆盖区间内(比如10000~32767),那short确实是比int更省空间的选择;但如果要覆盖全部5位数字,那最高效的就是int了(毕竟它只占4字节,而且能轻松容纳所有5位数字)。
另外补充一句:如果用ArrayList的话,因为它不能直接存基本类型,你得用Short或Integer包装类,但哪怕是包装类,内存开销也还是远低于String的。
内容的提问来源于stack exchange,提问作者dsafas fsafasfsa
相关产品推荐
相关产品推荐

