java中大型整数流的统计

Jul*_*iaz 6 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);
Run Code Online (Sandbox Code Playgroud)

要么

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()));
}
Run Code Online (Sandbox Code Playgroud)

And*_*rew 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*/}
}
Run Code Online (Sandbox Code Playgroud)

这给您留下了仅由一个微小数组表示的大量数据。