【问题标题】:java array of arraylists数组列表的java数组
【发布时间】:2011-10-31 14:46:55
【问题描述】:

我的程序中有四列按钮。分配新按钮时,按钮在列之间移动。有没有一种方法可以创建 1 个数组列表数组,而不是声明 4 个单独的数组列表来存储按钮,这样我就可以简单地遍历数组?

我试过List<JButton>[] lists = new ArrayList<JButton>[5];

但这行不通。我错过了什么?

编辑:

for(int i = 0; i < 5; i++){
            if(choiceList.getSelectedIndex() == i){
                if(btnPersons[nameList.getSelectedIndex()].getX() == column[i]){
                    JOptionPane.showMessageDialog(null, "Error - Name already present in the column.","", 1);
                }else{
                    for(int j = 0; j < 5; j++){
                        if(lists[j].get(i) != null){
                            lists[j].remove(btnPersons[nameList.getSelectedIndex()]);
                        }
                    }
                    lists[i].add(btnPersons[nameList.getSelectedIndex()]);
                    lists[i].get(i).setBounds(column[i], ROWS[i], 125, 20);
                    //reloadLocations();
                }
            }
        }

这是我目前的代码。一旦选择了新列,它就会检查按钮所在的列表并将其删除,然后将其添加到新列表中。但我的新问题是使用 lists[i] 将不再有效。 Idk 如何使用此声明正确循环遍历我的数组列表:

List<ArrayList<JButton>> lists = new ArrayList<ArrayList<JButton>>(); 

【问题讨论】:

  • 嗯,List[] lists = new ArrayList[5]; 可以编译并且对我来说很好,尽管我会使用泛型并会创建一个 List[5] 数组。也许错误在其他地方。你的代码有什么问题?您看到了哪些错误消息?
  • 请描述它是如何不起作用的。它应该可以工作。
  • 也许你能告诉我们什么是“行不通”?这篇文章看起来很有趣,如果你提供更多信息,它可能会成为一篇很棒的文章。
  • Eclipse 强调了“新的 ArrayList[5];”部分并说:“无法创建 ArrayList 的通用数组”
  • 虽然你不能new 一个泛型数组,但你可以这样做:ArrayList&lt;JButton&gt;[] lists = (ArrayList&lt;JButton&gt;[]) Array.newInstance(ArrayList.class, 5);

标签: java arrays arraylist


【解决方案1】:

您不能从具有泛型参数的类创建数组。

您要么想要制作一个列表列表,要么放弃泛型参数。

【讨论】:

    【解决方案2】:

    您无法为通用对象调用 new 运算符,因为在运行时该类型已被删除。

    【讨论】:

      【解决方案3】:

      您必须保留一个 JButton 对象列表:

      List<List<JButton>> lists = new ArrayList<List<JButton>>();
      // populate (replace with your code)
      lists.add(Arrays.asList(new JButton("list 1, button 1"), new JButton("list 1, button 2")));
      lists.add(Arrays.asList(new JButton("list 2, button 3"), new JButton("list 2, button 4")));
      lists.add(Arrays.asList(new JButton("list 3, button 5"), new JButton("list 3, button 6")));
      lists.add(Arrays.asList(new JButton("list 4, button 7"), new JButton("list 4, button 8")));
      
      // iterate
      for(List<JButton> subList : lists) {
          for(JButton button : subList) {
              System.out.println(button.getText());
          }
      }
      

      【讨论】:

      • 如何创建一个与列表列表对应的 for 循环。例如 list[i] 将不起作用...
      • 试试for (JButton button : lists.get(i)) { // ...}
      • 还是没有运气。对不起,我不认为我完全明白。
      • 如果您想循环/迭代列表列表,请参阅答案中的代码。如果您想循环/迭代一个特定列表,例如清单编号1或2见评论。我不明白你到底想做什么。
      【解决方案4】:

      举一个对我有用的例子/上面谈到的。

          List []oArrayOfArrayList = new ArrayList[2];
      
          List<String> oStringList = new ArrayList<String>();
          List<Integer> oIntegerList = new ArrayList<Integer>();
      
          oArrayOfArrayList[0] = oStringList ;
          oArrayOfArrayList[1] = oIntegerList ;
      

      【讨论】:

        【解决方案5】:

        为您的 ArrayList 创建一个类:

            private class xxx extends ArrayList<JButton> {
                // need serial to keep IDE happy
                private static final long serialVersionUID = -2392107594926751233L;
            };
        
            private xxx[] lists = new xxx[5];
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-08-27
          • 1970-01-01
          • 2012-03-07
          • 2012-11-01
          • 2011-12-23
          相关资源
          最近更新 更多