【问题标题】:Multidimentional Arraylist (Index error)多维 Arraylist(索引错误)
【发布时间】:2014-07-14 19:18:18
【问题描述】:

我想在我的工作中使用多维数组列表。请帮我解决这个问题。我的代码是:

public class newType {
  String name;
  int id;

  public newType() {
    name="";
    id=0;
  }

  public newType(String name,int id) {
    this.name=name;
    this.id=id;
  }
}

public class MainClass {
  public static void main (String[] args) throws Exception {    

   HashMap<String, ArrayList<ArrayList<newType>>> temp=new HashMap<String,   ArrayList<ArrayList<newType>>>();

    ArrayList<ArrayList<newType>> arrObj=new ArrayList<ArrayList<newType>>();

    arrObj.clear();
    arrObj.add(new ArrayList<ValueType>());
    arrObj.add(new ArrayList<ValueType>());
    arrObj.add(new ArrayList<ValueType>());
    arrObj.get(0).add(new newType("Jhon",1));
    arrObj.get(1).add(new newType("get",1));
    arrObj.get(1).add(new newType("book",1));
    arrObj.get(2).add(new newType("coma",1));
    arrObj.get(2).add(new newType("brother",1));
    temp.put("Jhon", arrObj);

    arrObj.clear();
    arrObj.add(new ArrayList<newType>());
    arrObj.add(new ArrayList<newType>());
    arrObj.add(new ArrayList<newType>());
    arrObj.get(0).add(new newType("Mikel",1));
    arrObj.get(0).add(new newType("son",,2));
    arrObj.get(1).add(new newType("puts",2));
    arrObj.get(1).add(new newType("his",1));
    arrObj.get(2).add(new newType("when",1));
    arrObj.get(2).add(new newType("hich",1));
    temp.put("Mikel", arrObj);

    arrObj.clear();
    arrObj=temp.get("Mikel");
    System.out.println(arrObj.get(0).get(0).name);
  }
 }

当我运行这个程序时,编译器给我以下错误:

线程“主”java.lang.IndexOutOfBoundsException 中的异常:索引:0,大小:0 在 java.util.ArrayList.RangeCheck(未知来源) 在 java.util.ArrayList.get(未知来源) 在 MainClass.main(MainClass.java:47)

错误与arrObj.get(0).get(0).name有关

我该如何解决?

【问题讨论】:

  • 一个数组列表和多个维度似乎是不可能的!
  • @RomanC 我不确定你的意思。这不是和数组一样的规则吗?二维数组只是其他一维数组的一维数组。相同的规则可以应用于列表(OP 使用一个 ArrayList 来存储其他 ArrayList)。
  • @Pshemo 列表不是数组,而是自己命名。

标签: java class jakarta-ee arraylist multidimensional-array


【解决方案1】:

当你 put 到你的 HashMap 时,它不会添加你的 2D ArrayList 的副本,它会添加对它的引用。但是您每次添加 2D ArrayList 时都会清除它,因此在查询其内容时,您会得到 2 个对相同空 2D ArrayList 的引用。

每次都创建一个新的 2D ArrayList,这样每次都可以添加单独的对象。而不是

arrObj.clear();

试试

arrObj = new ArrayList<ArrayList<newType>>();

(上次不用clear()。)

【讨论】:

    猜你喜欢
    • 2011-03-08
    • 2023-03-11
    • 2019-06-30
    • 1970-01-01
    • 1970-01-01
    • 2013-06-30
    • 2017-08-20
    • 2013-05-02
    • 1970-01-01
    相关资源
    最近更新 更多