【问题标题】:Arraylist in Arraylist, unchecked error. JavaArraylist 中的 Arraylist,未经检查的错误。爪哇
【发布时间】:2011-12-23 00:05:52
【问题描述】:

我试图将数组列表放入数组列表中。将数据添加到新数组中,然后按顺序打印它们。我只是得到错误。

这是使用 for 循环在另一个数组列表中创建数组列表的正确方法吗?

我现在还想知道如何以比这些长表达式更好的方式从数组中获取数据。

我的错误

    jogging.java:101: warning: [unchecked] unchecked call to add(E) as a member of the raw type java.util.ArrayList
                res.get(iter).add(new Resultat(name,time));

   jogging.java:152: warning: [unchecked] unchecked conversion found   : java.util.ArrayList required: java.util.List<T> Collections.sort(res.get(iter2));

    jogging.java:152: warning: [unchecked] unchecked method invocation: <T>sort(java.util.List<T>) in java.util.Collections is applied to (java.util.ArrayList)
                Collections.sort(res.get(iter2));

 导入 java.util.;
    导入 java.lang.;

class Resultat implements Comparable<Resultat> {

    String namn;
    double tid;

    public Resultat( String n, double t ) {
        namn = n;
        tid = t;
    }
 public String toString() 
{
        return namn + " "+ tid;
    }

    public int compareTo( Resultat r ) {

        if (this.tid < r.tid){
        return -1;
        }
        else if (this.tid > r.tid){
                return 1;
                  }
        else if (this.tid == r.tid && this.namn.compareTo(r.namn) <= 0)
        {
            return -1;
        }
        else if ( this.tid == r.tid && this.namn.compareTo(r.namn) >= 0){
            return 1;
        }
        else {return 0;}


    }
}



public class jogging {

    public static void main( String[] args ){


        int runners = scan.nextInt();

        int competitions = scan.nextInt();

    //create arraylist with arraylists within
        ArrayList <ArrayList> res = new ArrayList<ArrayList>();
        for(int i = 0; i <= competitions; ++i){
        res.add(new ArrayList<Resultat>());
        }




        for (int i = 0; i < runners; i++){

            String name = scan.next();

        //runs the person made
        int antalruns = scan.nextInt();

        for(int n = 0; n <antalruns; n++){

            //number of the run
            int compnumber = scan.nextInt();
            //time for the run
            double time = scan.nextDouble();


            for(int iter = 0; iter < res.size(); ++iter){
                res.get(iter).add(new Resultat(name,time));
            }




                       }        
                 }




            for(int iter2 = 0; iter2 < res.size(); ++iter2) {
                Collections.sort(res.get(iter2));
                System.out.println(iter2);

                for(int it = 0; it < res.get(iter2).size(); ++it) {
                    System.out.println(res.get(iter2).get(it));
                }
            }


                }
                 }

【问题讨论】:

    标签: java arraylist unchecked


    【解决方案1】:

    未检查的警告是因为您没有声明第二个 ArrayList 的泛型类型。尝试使用

    ArrayList <ArrayList<Resultat>> res = new ArrayList<ArrayList<Resultat>>();
    

    是的,这有点乏味。 :-(

    此外,大多数人认为使用左侧的接口(例如 List,而不是 ArrayList)是一种很好的做法,以防万一您对未来的实现改变主意。例如

    List <List<Resultat>> res = new ArrayList<ArrayList<Resultat>>();
    

    添加

    此外,您可以简化 compareTo() 方法。要比较潮汐,请查看 Double.compare()。比如:

       public int compareTo( Resultat r ) {
    
          int compare = Double.compare(tid, r.tod);
          if (compare != 0)
             return compare;
          else
             return namn.compareTo(r.namn);
       }
    

    【讨论】:

    • 啊,成功了!感觉有点愚蠢,我没有设法弄清楚:)
    • @user1112634 - 你从泛型类型问题中得到的编译错误很难理解......如果你还没有一个关于泛型类型如何在 Java 中工作的良好思维模型。跨度>
    【解决方案2】:

    每次创建 ArrayLIst 时,都需要声明其数据类型。因此,当您在 ArrayList 中创建 ArrayLIst 时,您需要编写:

    ArrayList<ArrayList<Resultat>> res = new ArrayList<ArrayList<Resultat>>();
    

    如果您编写,编译器也必须付出更少的努力:

    import java.util.ArrayList;  // NOT: import java.util.*;
    

    类名从大写开始是java命名约定。因此,最好将您的班级名称写成:

    public class Jogging {
        /..
    }
    

    【讨论】:

    • import java.util.*; 没有;编译器只需要做一点额外的工作。绝对不需要import java.lang.*;
    猜你喜欢
    • 2015-06-07
    • 2021-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多