【问题标题】:Java - Filling multidimensional (2d) ArrayList like a 2d arrayJava - 像二维数组一样填充多维(2d)ArrayList
【发布时间】:2015-08-13 05:55:41
【问题描述】:

不久前,在我习惯于面向对象编程之前,我创建了一个基本的井字游戏并使用数组来创建棋盘。

代码完全是一团糟,因为我没有正确理解如何使用对象,但我确实正确初始化了板子:

char[][] board = new char[3][3];
for (int i = 0; i < board.length; i++){
    for (int j = 0; j < board[i].length; j++){
        board[i][j] = '[]' //or something like that...don't remember exactly
    }
}

我的问题是你会如何使用 ArrayList?

     ArrayList <ArrayList<Character>> board = new ArrayList(); // this initialization is not
    // wrong using Java 8 but for earlier versions you would need to state the type on both 
//sides of the equal sign not just the left
        for (int i = 0; i < board.size(); i++){
                for (int j = 0; j < board.get(i).size(); j++){
                    board.get(i).get(j).add('[]');
                }
            }

但这不起作用。

不一定要完全这样,我只是一般想了解如何处理多维ArrayLists。

-谢谢

【问题讨论】:

    标签: java arrays multidimensional-array arraylist


    【解决方案1】:

    与数组不同,您不能直接初始化整个 ArrayList。您可以预先指定预期的大小(当您使用非常大的列表时,这有助于提高性能,因此最好总是这样做)。

    int boardSize = 3;
    ArrayList<ArrayList<Character>> board = new ArrayList<ArrayList<Character>>(boardSize);
    for (int i = 0; i < boardSize; i++) {
        board.add(new ArrayList<Character>(boardSize));
        for (int j = 0; j < boardSize; j++){
            board.get(i).add('0');
        }
    }
    

    【讨论】:

    • 我会投票,但我没有足够的声誉......非常感谢!
    【解决方案2】:

    主要区别在于,在您的原始代码中,您有一个多维基元数组(在本例中为char),您所要做的就是为数组中的每个插槽分配一个新的基元值。

    但是,您现在想要的是 ArrayList 的(ArrayListCharacter)。当您创建 ArrayList 时,它是空的。为了继续,您需要先填写几个(ArrayList of Character),然后才能开始自己添加Characters。

    例如,

    ArrayList <ArrayList<Character>> board = new ArrayList<>();
    
    for (int i=0; i<3; i++) {
      board.add(new ArrayList<Character>());
    }
    

    现在您可以开始将Characters 添加到您的列表中:

    for (int i=0; i<3; i++) {
      for (int j=0; j<3; j++) {
        board.get(i).add('A');
      }
    }
    

    希望这会有所帮助。

    【讨论】:

    • 确实如此...谢谢您的好先生。还不能投票,但如果可以的话会投票
    【解决方案3】:

    首先,您必须在第一行正确初始化 ArrayList,然后您必须在第一个循环的每次运行中初始化一个新的 ArrayList:

    ArrayList <ArrayList<Character>> board = new ArrayList<ArrayList<Character>>();
    for (int i = 0; i < 3; i++){
        ArrayList<Character> innerList = new ArrayList<Character>();
        board.add(innerList);
        for (int j = 0; j < 3; j++){
            innerList.add('[');
        }
    }
    

    【讨论】:

    • 感谢您的帮助。还不能投票,但如果可以的话。但是,由于我使用的是 Java 8,因此您说 ArrayList 初始化不正确的原始陈述是错误的。在java 8中,等号两边不需要类型,就在左边。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-08
    • 2013-09-16
    相关资源
    最近更新 更多