【问题标题】:Having more than one ArrayList拥有多个 ArrayList
【发布时间】:2015-05-07 18:30:18
【问题描述】:

大家好,今天大家都在尝试在我的 ArrayList 中执行此操作,我知道这是可能的,但它在 main 处给了我一个例外。现在我想知道我做错了什么或者最好的方法是什么。我试图有一个 ArrayList,在 ArrayList 里面我有另一个,我给它一个变量。

import java.util.ArrayList;
import java.util.Collection;

public class Example3 {
public static void main(String[] args) {
    ArrayList<ArrayList<Family>> smallFamily = new ArrayList<ArrayList<Family>>();
    smallFamily.addAll((Collection<? extends ArrayList<Family>>) (new Family("John",89 )));

    smallFamily.addAll((Collection<? extends ArrayList<Family>>) new Family ("Smith", 78)));

    for(ArrayList<Family> s: smallFamily){
        System.out.println(s);
    }

}

下面是我的家庭课程,在我的家庭中这是价值观

public class Family {

    public String Name;
    public int weight;

    public Family(String Name, int weight){
        this.Name = Name;
        this.weight = weight;
    }
    public String toString(){
        return ("The name is " + this.Name + "The weight is: " + this.weight);
    }
}}

编译和运行程序时抛出的异常是

Exception in thread "main" java.lang.ClassCastException: Examples.Family cannot be cast to java.util.Collection
    at Examples.Example3.main(Example3.java:9)

现在我正在自学 Java,没有人可以请教。任何形式的帮助将不胜感激。

【问题讨论】:

  • 您在new Family ("Smith", 78) 之前的第二行smallFamily.addAll 上忘记了(
  • 附注一下,不要将你的变量字符串名称,int weight public,它应该设置为private。
  • 对不起,这可能是在打字,但在我的程序中很清楚。
  • 异常意味着您将 Family 转换为 Collection> 并且 Family 不扩展 Collection。你到底想做什么?为什么需要数组数组?
  • 我试图开箱即用,看看这是否可行。

标签: java arraylist


【解决方案1】:

您正在尝试将对象转换为集合。这不起作用。相反,您需要这样做:

smallFamily.add(new ArrayList<Family>(1) {{add(new Family("", 0));}});

这将创建一个ArrayList,在创建时添加new Family("", 0)。然后,它将这个数组列表添加到 smallFamily 数组列表中。

【讨论】:

  • 请注意,arraylist 的大小为 1,因此数组列表不必增加其大小,这需要大量计算
【解决方案2】:

现在为什么你在这里得到这条线

smallFamily.addAll((Collection<? extends ArrayList<Family>>) (new Family("John",89 )));

只是因为计算机无法理解你在做什么,所以它为你投射。或者你投了:)。现在尝试将对象转换为集合不起作用。

你需要试试这个

public class Example3 {
public static void main(String[] args) {
    ArrayList<ArrayList<Family>> smallFamily = new ArrayList<ArrayList<Family>>();
    smallFamily.add(new ArrayList<Family>(2222) {{add(new Family("smith ", 0));}});

    smallFamily.add(new ArrayList<Family>(333) {{add(new Family("john ", 0));}});

    for(ArrayList<Family> s: smallFamily){
        System.out.println(s);
    }

}
}

当您添加家庭课程时

public class Family {

    public String Name;
    public int weight;

    public Family(String Name, int weight){
        this.Name = Name;
        this.weight = weight;
    }
    public String toString(){
        return ("The name is " + this.Name + "The weight is: " + this.weight);
    }
}

输出应该是

[The name is smith The weight is: 0]
[The name is john The weight is: 0]

希望这就是你的预期。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-03-22
    • 2011-06-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-05
    • 1970-01-01
    相关资源
    最近更新 更多