java中大型整数流的统计

时间:2012-06-14 17:20:28

标签: java arraylist

我正在从一个文件中读取大量的整数,最后我想从这些整数中得到一些基本的统计数据(中位数,平均数,25个百分点,75个百分点等)。我可以随时计算一些这些统计数字,但在我看来,计算第25/75百分位数会很复杂。我认为,最简单的方法是将整数放在一个列表中,并从该列表中进行统计。但是,由于列表太大,可能会减慢程序使用这么多内存的速度。你们有什么建议吗? 这就是我获取数据的方式以及我想到的两个选项:

Scanner input = new Scanner(new File("name"));
ArrayList<Integer> lits= new ArrayList<Integer>();
while(input.hasNextLine()){
  list.add(Integer.parseInt(input.nextLine()));
}
doStatistics(list);

OR

Scanner input = new Scanner(new File("name"));
while(input.hasNextLine()){
   //I dont know how I would acomplish this for the percentile stats
   acqquireStats(Integer.parseInt(input.nextLine()));
}

2 个答案:

答案 0 :(得分:3)

鉴于值的数量明显小于样本数,因此存储每个值的数量比反向值更有意义。

Long[] samples = new Long[101];

while(input.hasNextLine()){
    try{
      samples[Math.max(0, Math.min(100, Integer.parseInt(input.nextLine())))];
    } catch (ParseException e){/*not a number*/}
}

这将为您留下一大堆数据,只需一个小数组即可。

答案 1 :(得分:1)