java中大整数流的统计

java中大整数流的统计,java,arraylist,Java,Arraylist,我从一个文件中读取了大量的整数,最后我想从这些整数中得到一些基本的统计数据(中位数、平均值、第25百分位、第75百分位等)。我可以随时计算其中的一些统计数字,但在我看来,计算第25/75百分位数会很复杂。我认为,最简单的方法是将整数放在一个列表中,然后从该列表中进行统计。但是,由于列表太大,可能会因为占用太多内存而降低程序的速度。你们有什么建议吗? 这就是我获取数据的方式以及我想到的两个选项: Scanner input = new Scanner(new File("name")); Arra

我从一个文件中读取了大量的整数,最后我想从这些整数中得到一些基本的统计数据(中位数、平均值、第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);

本文和John D.Cook是您的最佳选择:


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

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*/}
}

这就给您留下了一组巨大的数据,这些数据仅由一个小数组表示。

整数有界吗?IE介于0和10 ^ 5之间或是什么?是的,它们在0到100之间,然后考虑计数的出现而不是累积。更容易处理该数据集。想想看,当你说一个“巨大的数字”时,
newarray[100]
。大概有多少?千千万万,千千万万,等等。谢谢@JamesMontagne,巨大的是相对的。在这种情况下,巨大意味着10到100米
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*/}
}