我需要对一组数据进行操作,数据的结构是这样的样本名  检测日期    检测时间       数据1      数据2     数据3 具体数据例子:
样本1   20130705  15:40:00    1.24      2.45      4.24
样本1   20130705  15:50:00     2.44     4.55      5.66
...
样本2   20130706  13:00         1.2      3.45      45.5
样本2   20130707  14:00        2.3       23.4      3.4一共大概1000个样本,每个样本需要保持200个数据,每天有新数据进来就把最老的同样的样本数据删去。样本名+日期+时间 组合是unique的没重复。 需要排序,先排样本,再排时间 
我的这种情况应该选用什么数组形式来弄呢?我是java新手,非常谢谢。 

解决方案 »

  1.   

    ArrayList还是Set有一点很重要,就是这个集合存在对象相同的情况么?如果存在那么就只用ArrayList,如果不能存在相同的对象,那么就只能用Set。
      

  2.   


    谢谢,我的情况是可以做到没有重复的。保证样品名+日期+时间是每个数据独一无二的。不过我对java的array不熟悉。我这里每个数据既有字符串又有浮点数,这样是可以的么?
    我需要对这个数组的前三项排序,就是说先按样品名排,如果名字一样就按日期排,如果日期也一样就按时间排
    set和arraylist支持这样的排序么?还是要自己写排序部分?我看了下collections.sort,没有太明白。
      

  3.   

    不用数据库吗?我猜是LinkedList
      

  4.   

    你还是没太明白。不管是ArrayList还是Set它们都是存对象的集合,你只需要明白,你将要存的对象中可能出现重复的情况吗?如果允重复,那就ArrayList就可以了。如果不重复的话就只能用Set了,至于怎么来辨别是重复的情况,就可以通过具体的Comparetor或是Comparable来完成了。
      

  5.   


    java里用数据库方便么?如果是数据库的话,排序啥的就太简单了。
      

  6.   

    不好意思,我不太明白你说意思我原来想着是这样的,建一个arraylist的二维数组,string类型的。
    原始数据存在文本文件,开始程序是把文本读进来,把数据split之后放入这个二维数组。
    新数据来了之后就加入到数组,然后把样本数据从文本转成浮点,各种处理完了之后,把数组按照名字,日期排序后存回文件。不太明白你说的对象在这里是指什么。不是指一个数据么?
      

  7.   

    哦,你的意思是说
    我可以把一个数据定义成一个class的instance。
    一个class里面定义name,date,time,data1,data2,data3.
    然后在定义这个class的arraylist是么?
      

  8.   


    java里用数据库方便么?如果是数据库的话,排序啥的就太简单了。java里用数据库方便
      

  9.   

    如果你每个样本只有200个数据,每天只更新一次,用什么方法都无所谓。如果你非要精益求精,那就用TreeSet。每个样本一个TreeSet,按时间排序。当你插入数据的时候,Comparator可以检测重复,然后抛出运行期异常,你一接,就知道这个数据跟已有的是否重复(这是阴招,慎用)。
      

  10.   

    Comparator是什么?好象用的地方不少
      

  11.   

    如果有unique的key,用map也是一个不错的选择啊~!采用hash的散列,提高查询的效率。比list比较方便一些。
      

  12.   


    恩,1000×200=20w的数据
    然后其实还需要几个不同时间区间的表,总之大概1M-2M的数据吧。
    我试着存在硬盘上asi码。大概也就几十个MB的样子。这个对现在的pc内存应该没问题吧。所以就不想用数据库了。通过大家说的我基本想明白了,准备定义个对象,把这些数据统统定义在对象里,然后用arraylist的数组来操作他们。
      

  13.   


    恩,1000×200=20w的数据
    然后其实还需要几个不同时间区间的表,总之大概1M-2M的数据吧。
    我试着存在硬盘上asi码。大概也就几十个MB的样子。这个对现在的pc内存应该没问题吧。所以就不想用数据库了。通过大家说的我基本想明白了,准备定义个对象,把这些数据统统定义在对象里,然后用arraylist的数组来操作他们。
    放在数据库很方便,自己实现操作麻烦。
    Map+LinkedList来存放数据。大致代码如下
    for(){
    LinkedList<Bean> list = new LinkedList<Bean>()
    Map<String,LinkedList> map = new HaspMap<String,LinkedList>();//Map<样本名称,样本名称对应的数据>
    for(){
     list.add(bean);
    }
    map.put("样本xxx",list);
    }
      

  14.   

    这种建自定义的类更好,然后用 List<xxx>
    class xxx { 样本名  检测日期    检测时间       数据1      数据2     数据3 }