A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Sniper_qiu 中级黑马   /  2014-4-11 15:39  /  872 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

java Vector和ArrayList的大小有界限吗?使用Vector或ArrayList存储数据时会不会因为数据量太大而溢出?即我要用Vector或ArrayList存储100万条数据甚至更多,会不会导致溢出呢?

评分

参与人数 1技术分 +1 收起 理由
滔哥 + 1

查看全部评分

4 个回复

倒序浏览
Vector和ArrayList是没有限定大小的,跟数组是不一样的,
在java分配的时候会给ArrayList分配10存储空间,在存满了以后会按50%分配方法在给容器分5个存储空间
Vector创建对象时会分配10空间,在存满以后会在按100%分配方法在给容器分10个空间
所以ArrayList更节省空间

因为jvm在工作的时候都会有一片内存,这片内存是有限的所以要是数据过大那也是不行的

评分

参与人数 1技术分 +1 收起 理由
菜小徐 + 1

查看全部评分

回复 使用道具 举报
从内部实现机制来讲ArrayList和Vector都是使用Objec的数组形式来存储的。当你向这两种类型中增加元素的时候,如果元素的数目超出了内部数组目前的长度它们都需要扩展内部数组的长度,Vector缺省情况下自动增长原来一倍的数组长度,ArrayList是原来的50%,所以最后你获得的这个集合所占的空间总是比你实际需要的要大。如果你要在集合中保存大量的数据那么使用Vector有一些优势,你可以通过设置集合的初始化大小来避免不必要的资源开销。

评分

参与人数 1技术分 +1 收起 理由
菜小徐 + 1

查看全部评分

回复 使用道具 举报
补充一点:
如果你想存更多的数据可以设置 jvm 内存大小
java -Xms64m -Xmx256m YourMainClass
-Xms是设置内存初始化的大小
-Xmx是设置最大能够使用内存的大小(最好不要超过物理内存大小)
ArrayList 和Vector 都是使用数组方式存储数据,此数组元素数大于实际存储的数据以便增加和插
入元素,它们都允许直接按序号索引元素,但是插入元素要涉及数组元素移动等内存操作,所以索引
数据快而插入数据慢,Vector 由于使用了synchronized 方法(线程安全),通常性能上较ArrayList
差,而LinkedList 使用双向链表实现存储,按序号索引数据需要进行前向或后向遍历,但是插入数
据时只需要记录本项的前后项即可,所以插入速度较快。

评分

参与人数 1技术分 +1 收起 理由
滔哥 + 1

查看全部评分

回复 使用道具 举报
简而言之:ArrayList  查询块,增删慢。  Vector 查询效率低,增删块!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马