【问题标题】:how to do a sum on many ArrayLists quickly?如何快速对许多 ArrayLists 求和?
【发布时间】:2015-08-17 02:33:18
【问题描述】:

在这个程序中,我有一个包含高尔夫分数的文本文件,并且我已将每个高尔夫球手的分数添加到一个 ArrayList 中。我需要在每个 ArrayList 中获取这些分数的总和,以获得每个高尔夫球手的总和。

    File golf = new File("golf.txt");
    Scanner scan = new Scanner(golf);
    int i = 0;
    int parsum = 0, golfsum1 = 0, golfsum2 = 0, golfsum3 = 0, golfsum4 = 0;

    ArrayList<Integer> par = new ArrayList<Integer>();
    ArrayList<Integer> golfer1 = new ArrayList<Integer>();
    ArrayList<Integer> golfer2 = new ArrayList<Integer>();
    ArrayList<Integer> golfer3 = new ArrayList<Integer>();
    ArrayList<Integer> golfer4 = new ArrayList<Integer>();

    while (scan.hasNext()) {
        par.add(i, scan.nextInt());
        golfer1.add(i, scan.nextInt());
        golfer2.add(i, scan.nextInt());
        golfer3.add(i, scan.nextInt());
        golfer4.add(i, scan.nextInt());
        i++;
    }

    for (int j : par)
    {
        parsum += j;
    }

    for (int j : golfer1) 
    {
        golfsum1 += j;
    }
    for (int j : golfer2) 
    {
        golfsum2 += j;
    }
    for (int j : golfer3)
    {
        golfsum3 += j;
    }
    for (int j : golfer4)
    {
        golfsum4 += j;
    }

有没有办法更快地做到这一点,而不是拥有 5 个增强的 for 循环

【问题讨论】:

  • 您可以在列表中拥有一个列表:List&lt;List&lt;Integer&gt;&gt;,然后嵌套您的 for 循环。
  • 能否请您详细说明我将如何做到这一点?

标签: java loops arraylist


【解决方案1】:
File golf = new File("golf.txt");
Scanner scan = new Scanner(golf);
int i = 0;
int parsum = 0, golfsum1 = 0, golfsum2 = 0, golfsum3 = 0, golfsum4 = 0;

ArrayList<Integer> par = new ArrayList<Integer>();
ArrayList<Integer> golfer1 = new ArrayList<Integer>();
ArrayList<Integer> golfer2 = new ArrayList<Integer>();
ArrayList<Integer> golfer3 = new ArrayList<Integer>();
ArrayList<Integer> golfer4 = new ArrayList<Integer>();

while (scan.hasNext()) {
    final int parValue = scan.nextInt(),
        golfValue1 = scan.nextInt(),
        golfValue2 = scan.nextInt(),
        golfValue3 = scan.nextInt(),
        golfValue4 = scan.nextInt();

    parsum += parValue;
    golfsum1 += golfValue1;
    golfsum2 += golfValue2;
    golfsum3 += golfValue3;
    golfsum4 += golfValue4;

    par.add(i, parValue);
    golfer1.add(i, golfValue1);
    golfer2.add(i, golfValue2);
    golfer3.add(i, golfValue3);
    golfer4.add(i, golfValue4);
    i++;
}

这样您在扫描时直接添加并将它们存储在列表中,但避免不必要的列表迭代以获得总数。

【讨论】:

  • 我需要在 ArrayLists 中输出分数以及总数
  • 好主意。 如果问题的要求发生了变化,这将起作用——现在的问题是询问如何快速总结 来自 ArrayLists 的分数。如果不需要 ArrayList,那么您就在做生意 :)
  • 好的,所以在 while 循环中也将它们添加到列表中。您无需重复列表即可获得总数。我会编辑答案。
【解决方案2】:

如果您使用的是 Java 8,请使用 IntStream

http://www.deadcoderising.com/2015-05-19-java-8-replace-traditional-for-loops-with-intstreams/

此外,请考虑对每个求和任务进行线程化,尽管它是高尔夫分数(微不足道的小任务),开销可能会令人望而却步。

【讨论】:

  • 我现在有一个解决方案,但我一定会更多地阅读。感谢您的意见。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-02-20
  • 2015-07-14
  • 2014-01-05
  • 2018-02-07
  • 1970-01-01
  • 2019-02-04
  • 2018-01-09
相关资源
最近更新 更多