【问题标题】:Java Average of MultiDimensional List多维列表的Java平均值
【发布时间】:2014-10-03 23:39:04
【问题描述】:

我在计算多维列表的平均值时遇到问题。我在这里和其他地方阅读了大部分问题和答案,但我找不到解决方案。

我的代码生成一个列表,其值如下所示(4 列)。我试图计算每列的平均值,但我不知道如何计算。由于列表没有长度属性,因此我尝试将整个事物转换为数组,以便确定长度,然后求和并取平均值。数据被放置在哈希图(map)中,然后转储到列表(mapList)中。请告诉我如何做到这一点?非常感谢任何投入。谢谢!

Array  LinkedList ArrayList  Vector
[44, 40, 80, 81] 
[43, 56, 61, 42] 
[47, 34, 64, 41] 
[37, 39, 86, 66] 
[31, 30, 55, 43]

这里是代码。

private void setMap(){
    // print headers
    System.out.printf("%5s%12s%10s%8s\n","Array", "LinkedList",
            "ArrayList", "Vector");
    for (int i = 0; i < numberTimes; i++){

        // put calculated time into hashmap
        map.put("Array", timer.arrayTimes());
        map.put("LinkedList", timer.linkedTimes());
        map.put("ArrayList", timer.listTimes());
        map.put("Vector", timer.vectorTimes());                          

        // put hashmap values into List
        mapList = new ArrayList(map.values());                        

        // iterate through mapList list
        Iterator iter = mapList.iterator();                      

        // print hashmap values
        while (iter.hasNext()){         

             // print values in numbers
             System.out.printf("%-10d", iter.next());                 
         } // end while                          
        System.out.println();                          
    } // end for                                    
} // end setMap 

【问题讨论】:

    标签: java list arraylist average


    【解决方案1】:

    由于列表没有长度属性,我尝试转换 整个事情到一个数组,所以我可以确定长度,然后总结 并取平均值。

    List 没有长度属性,但有大小属性​​。例如,

    List<T> list = new ArrayList<T>();
    list.add((T) object1);
    list.add((T) object2);
    System.out.println(list.size());
    

    希望,这将为您设置获取列表大小的路径。

    因此,如果您将列表放入地图中,则遍历地图,针对地图的每个项目,遍历大小,计算它并获得平均值。

    【讨论】:

      【解决方案2】:

      您使您的代码非常混乱并且出现了复杂性,所以下面是我使用 Hashmap 技术查找平均值的代码。参考下面是我的代码,理解这一点并再次尝试实现..谢谢

      import java.util.*;
      
      public class QueQue {
      
      public static float getAverage(HashMap<String, ArrayList<Integer>> hm, String name) {
          ArrayList<Integer> scores;
          scores = hm.get(name);
          if (scores == null) {
              System.out.println("NOT found");
          }
      
          int sum = 0;
          for (int x : scores) {
              sum += x;
          }
          return (float) sum / scores.size();
      }
      //Find the Best Student from these Key-Value Pair
      public static String getBestStudent(HashMap<String, ArrayList<Integer>> hm) {
          double max = 0;
          String beststudent = null;
          for (Map.Entry<String, ArrayList<Integer>> x : hm.entrySet()) {
              String name = x.getKey();
              double average = getAverage(hm, name);
              if (average > max) {
                  max = average;
                  beststudent = name;
              }
          }
          return beststudent;
      }
      
      public static void main(String[] args) {
          HashMap<String, ArrayList<Integer>> hm = new HashMap<>();
          hm.put("Peter", new ArrayList<>());
          hm.get("Peter").add(10);
          hm.get("Peter").add(10);
          hm.get("Peter").add(10);
      
          hm.put("Nancy", new ArrayList<>());
          hm.get("Nancy").add(7);
          hm.get("Nancy").add(8);
          hm.get("Nancy").add(8);
      
          hm.put("Lily", new ArrayList<>());
          hm.get("Lily").add(9);
          hm.get("Lily").add(9);
          hm.get("Lily").add(8);
      
          System.out.println("Find the average of the Peter");
          float num = getAverage(hm, "Peter");
          System.out.println(num);
          String name = getBestStudent(hm);
          System.out.println(name);
      }
       }
      

      【讨论】:

        【解决方案3】:

        您可以使用增强的 for 循环来遍历哈希图中的每个元素,如下所示:

        private void setMap(){
            // print headers
            System.out.printf("%5s%12s%10s%8s\n","Array", "LinkedList",
                    "ArrayList", "Vector");
            for (int i = 0; i < numberTimes; i++){
        
                // put calculated time into hashmap
                map.put("Array", timer.arrayTimes());
                map.put("LinkedList", timer.linkedTimes());
                map.put("ArrayList", timer.listTimes());
                map.put("Vector", timer.vectorTimes());                          
        
                // Loops through each element of map.values() and assigns its value to the val variable
                for(String val : map.values()){
                    System.out.printf("%-10d", val);
                }                          
                System.out.println();                          
            } // end for                                    
        }
        

        请注意,您需要将 for 循环中的“String”更改为 HashMap 保存的数据类型。 你实际上可以使用 .size() 方法获取 hashMap 的大小,例如:

        HashMap<String, Integer> map = new HashMap<String, Integer>();
        map.size();
        

        【讨论】:

          【解决方案4】:

          如果您使用的是 ArrayList > stringarray_name = new ArrayList >() 您可以使用输出数组 list.size() 来查找总行,然后处理每行添加值并求平均值。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2013-07-22
            • 1970-01-01
            • 2013-07-06
            • 1970-01-01
            相关资源
            最近更新 更多