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

解决方案 »

  1.   

    不至于吧
    应用中没用到如此大的数据放在一个 Vector里
      

  2.   

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

  3.   

    单个List这么大的话肯定会出错的,曾经我有一个项目也涉及到了从数据库取出好多记录进行存储,大概有5000条吧,结果产生了数据丢失,呵呵,可以list套list啊
      

  4.   

    100 万条什么数据?一条数据是个对象,还是一个数字,还是一个字符串!List 的话,一般放个 20 万个 10 个长度的字符串基本上就会溢出了
      

  5.   


    做了个实验,放了976043个个长度的字符串内存才暴掉import java.util.ArrayList;
    import java.util.List;public class TestMemory {
    public static void main(String args[]) {
    List<String> lst = new ArrayList<String>();
    while (true) {
    lst.add(Long.toString(System.currentTimeMillis()).substring(3));
    System.out.println("List size:" + lst.size());
    System.out.println("free memory:"
    + Runtime.getRuntime().freeMemory() / 1024 + "K");
    }
    }
    }
      

  6.   

    如果你想存更多的数据可以设置 jvm 内存大小java -Xms64m -Xmx256m YourMainClass
    -Xms是设置内存初始化的大小
    -Xmx是设置最大能够使用内存的大小(最好不要超过物理内存大小)上面我这个程序这样设了以后能跑3百多万条数据
    List size:3392918
    free memory:20798K
    Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
    at java.util.Arrays.copyOf(Arrays.java:2760)
    at java.util.Arrays.copyOf(Arrays.java:2734)
    at java.util.ArrayList.ensureCapacity(ArrayList.java:167)
    at java.util.ArrayList.add(ArrayList.java:351)
    at com.fansy.test2009.test.TestMemory.main(TestMemory.java:10)
      

  7.   

    ArrayList 和Vector 都是使用数组方式存储数据,此数组元素数大于实际存储的数据以便增加和插
    入元素,它们都允许直接按序号索引元素,但是插入元素要涉及数组元素移动等内存操作,所以索引
    数据快而插入数据慢,Vector 由于使用了synchronized 方法(线程安全),通常性能上较ArrayList
    差,而LinkedList 使用双向链表实现存储,按序号索引数据需要进行前向或后向遍历,但是插入数
    据时只需要记录本项的前后项即可,所以插入速度较快。
      

  8.   

    原来只知道list是可变长度存放对象的集合 没有想过这个问题 学习了
      

  9.   

    1
    100001
    200001
    300001
    400001
    500001
    600001
    700001
    776037
    Java heap space
    两者都会的,内存溢出 
      

  10.   

    List size:976354
    free memory:0K
    Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
    at java.lang.StringBuilder.toString(StringBuilder.java:430)
    at 内存泄露.TestMemory.main(TestMemory.java:12)