1

在搜索有关多维数组列表的信息期间,我读到您可以创建一个类来处理多维数组列表。

我正在做一个类似于 Bejeweled 的 Android 游戏,而不是使用常见的多维网格,我想这会更好!?我还有一个所有精灵对象的列表,我想知道我是否可以使用多维数组列表类来存储和控制所有这些对象?

但我不确定一个类的外观以及如何从数组列表中设置和获取值?有没有人有兴趣解释它是如何工作的并展示一个简单的代码示例?谢谢!

编辑:我想像这个例子一样在数组列表int grid[][] = new int[8][8];中有对象,但我想要对象而不是整数。我想知道是否有可能像我刚刚展示的示例一样简单地获取和设置值?

编辑 2:我有一个 8x8 的网格,这就是为什么我使用像 [8][8] 这样的数组,但我只能在每个位置有整数或布尔类型的值。我还必须使用 arraylist 来处理在此网格中具有位置的所有 64 个对象。每个对象都存储它的位置,包括网格数组和屏幕上的位置。我只是想让处理和创建一个带有多维数组列表的网格更简单一点,以存储对象并拥有一个网格?可能还是有更好的方法来做到这一点?

4

4 回答 4

2
    int size =8;
    List<List<Integer>> list  = new ArrayList<List<Integer>>(size);

    for(int i=0; i<size; i++)
    {
        list.add(new ArrayList<Integer>());
    }

    for (int i = 0; i < size; i++) 
    {
        for (int j = 0; j < size; j++) 
        {
            Integer x = list.get(0).get(1); //access the 0,1 element
        }
    }

编辑:
如果你想使用特定的类。例如:Node,您可以使用List<List<Node>>而不是List<List<Integer>>然后访问它。然后,您可以调用Node该类的任何方法,如下所示:

 Node node = list.get(0).get(1); // access the Node at 0,1
 node.getProperties();
于 2013-05-27T07:21:58.750 回答
1

ArrayList 和数组没有太大区别。

会说 ArrayList 只有 2 个优点:

  • 动态改变大小的能力
  • 在数组末尾添加新元素,无需查找第一个空槽

对于多维,另一个优点是嵌套 ArrayList 可能具有不同的长度。

在您的情况下,我认为您不需要任何这些,所以选择一个您会感觉更舒服,如果您不知道如何制作 ArrayList 的 ArrayList 但知道如何使用数组,请使用它们。

但只是为了回答你的问题。

ArrayList<ArrayList<Object>> root = new ArrayList<ArrayList<Object>>();

root.add(new ArrayList<Object>());
root.add(new ArrayList<Object>());
root.add(new ArrayList<Object>());
root.add(new ArrayList<Object>());

root.get(1).set(1, Object); //puts new object at position 1,1

Object o = root.get(1).get(1); //gets object from position 1,1

使用多维数组:

Object[][] grid = new Object[8][8];

grid[1][4] = new Object(); //set new object at position 1,4

grid[1][4].doSmth(); //calls method doSmth() of object stored at position 1,4

Object o = grid[1][4]; //gets object at position 1,4 
于 2013-05-27T07:34:44.743 回答
0
List<List<Integer>> multiList = new ArrayList<List<Integer>>();
multiList.add(new ArrayList<Integer>());
Integer element = multi.get(0).get(0); // element at 0,0
于 2013-05-27T07:13:45.160 回答
0

首先你从定义你的多维数组列表开始

int size = 8;
List<List<YourClass>> 2dList = new ArrayList<List<YourClass>>(size);

然后你初始化它

for(int rowIndex = 0; rowIndex < size; rowIndex++) {
    List<YourClass> row = new ArrayList<YourClass>(size)

    for(int columnIndex = 0; columnIndex < size; columnIndex++) {
        row.add(new YourClass());
    }

    2dList.add(row);
}

现在你有一个带有你的类实例的sizex ArrayListsize

访问它:

2dList.get(rowIndex).get(columnIndex) // will return the YourClass-Object you placed there

如果你想用另一个实例替换某个位置的对象,你需要先删除旧对象:

2dList.get(rowIndex).remove(columnIndex);
2dList.get(rowIndex).add(columnIndex, newYourClass);
于 2013-05-27T07:44:45.910 回答