有类Person{
        int age;
        String name;
}
要将Person的N个object(>100000)按照产生的顺序保存下来,然后按照插入的顺序读取,因为程序运行有时间限制,不能一次处理完,所以我考虑是不是可以将这些object存到文件里,然后在下一次程序运行的时候读取出来,可是一来我不懂如何将类存到文件中然后读取出来,二来是想问问大家是不是有更好的方式能够解决我的问题,实现object的队列。谢谢

解决方案 »

  1.   

    java有提供队列机制 Queue   实现了先进先出的数据结构,你可以采用这个。当然用楼上说的 List也是可以的List也是有序的。
      

  2.   

    将object存储在文件中,然后在需要的时候读入应该是java的序列化和反序列化,我的博客有:
    http://blog.csdn.net/randyjiawenjie/article/details/6438267。
    实现队列,直接用标准的集合类就可以了,List<Person>
      

  3.   

    如果可以用数据库 尽量还是用数据库吧 
    建立一张表 person 字段1 id(存储顺序) 字段2 age 字段3 name
    程序在运行的时候吧Person 一个一个存储到表里 下次运行就读取表 存储到 List<Person>里就行了没有数据库 用文件也行
    String = id(存储顺序)+":"+ Person.age+":"+Person.name+"\n"
    一个Person 一行数据存储到文件中
    下次运行就读文件 存储到 List<Person>里就行了
      

  4.   

    个人的看法:
    jdk有自带的队列实现,或者可以很容易的自己去构建队列
    但是,对象的量级已经超过10w,那么放在内存中已经不现实,因此,lz放到文件或硬盘上自己的想法,我觉得还是可行
    简单的一种就是ehcache,选择把对象存储在文件或硬盘上,然后按照队列处理的策略来对这些对象进行业务处理
    或者i/o流
      

  5.   

    我有一个疑惑,比如使用list实现,那么我不可能将内容都读取进来,因为最后要操作的内容很多,不可能都读如内存,那么如果仅仅是使用文件实现,我该如何删除队列头呢?java没有实现文件删除行的功能,所以我只能是将除队列头的内容读取出来,然后再存下来才能实现删除操作吧。这样的操作对很多条记录的时候会很慢的呀。因为来回复制的次数太多了
      

  6.   

    要用LinkedList来做吧.
    先进先出,要不停的插入数据和删除最先加入的数据.用ArrayList是明显不适合的.
    另外100000个person对象放内存中,大概算了下,也不会占用太多内存,应该在10M以内吧,可以考虑直接放内存里面.
      

  7.   

    while(br.readline()!= null) 当按照行读取文件中的Person 记录这个循环上可以做文章啊 
    何必要等到循环结束了 文件中的所有Person记录都读取出来了再做操作呢
      

  8.   

    若把对象存储到文件中需要用到IO的知识,ObjectInputStream和ObjectOutputStream这两个类是对文件读写的主要类,你可以自己查一下api解决不了可以在提问
      

  9.   

    以这么简单的对象来说,10万个放到ArrayList中没有什么问题,内存占用没多少
    当然如果Person类只是个举例就另当别论如果Person类很大,或者远超10万个,更好的办法是检查设计思路,避免一次创建完所有对象要比用文件缓存更好。文件缓存的开销毕竟不小,无论从运行时间、代码复杂度或是错误风险来说。
      

  10.   

    好的,谢谢大家,现在的问题是会有很多的object,所以必须存下来,我在看看有没有什么java开源的数据库可以支持吧。
      

  11.   

    LinkedList 提供链表 栈和队列的功能  你看看啊
      

  12.   

    分段读好了。
    比如分100次都进来,每一次都进来进行操作,然后输出到文件;然后清空List,读入下一组。
      

  13.   

    "要将Person的N个object(>100000)按",放在内存中小心撑爆内存,建议入库。
      

  14.   

    你可以将Person的数据保存在数据库中,用的时候在查询