2013-05-27 62 views
1

在我搜索有关多维数组列表的信息过程中,我读到可以创建一个类来处理多维数组列表。如何创建一个类来处理多维数组列表

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

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

编辑:我想在像这个例子arraylists对象,但不是整数,我想要的对象。我想知道是否有可能在我刚刚展示的示例中获得和设置相同的值?编辑2:我有一个网格8x8,这就是为什么我使用数组[8] [8],但我只能在每个位置有类型整数或布尔值的值。我还必须使用一个数组列表来处理在这个网格中有位置的所有64个对象。每个对象存储都位于网格阵列和屏幕上的位置。我只是想使它更简单一些,并且创建一个多维数组ListList来存储对象并有一个网格?可能还是有更好的方法来做到这一点?

+0

你所说的“多维数组列表”是什么意思? –

+0

像这样int grid [] [] = new int [8] [8];但使用arrayLists –

+2

您可以使用'ArrayList '。 –

回答

1

有ArrayList和数组之间没有大的区别。

会说只有2个优点的ArrayList:

  • 动态地改变大小
  • 在阵列的末尾添加新元素的能力,而不需要寻找第一个空槽

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

在你的情况,我认为你不需要任何这个,所以选择一个你感觉更舒适,如果你不知道如何制作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 
+0

感谢您的回答!对于这个游戏,我有一个8x8的网格,这就是为什么我使用像[8] [8]这样的数组,但是我只能在这个布尔或整数值中使用,所以我也必须有一个数组列表来保存所有的64网格中的对象。在每个网格中,我必须在存储的网格数组中定位,我希望你明白我想要解释什么!?我以为我可以创建一个多维数组,像8x8的网格与我的对象?这可能吗? –

+0

你可以创建你喜欢的任何类型的数组。你不限于基本类型'Object [] [] grid = new Object [8] [8];'给你多维的对象数组。 – Gustek

+0

阿哈,这看起来很有趣....但是...我有点困惑,我应该如何继续....我可以得到和设置值的领域和方法,然后通过只是称之为职位,如[1] [3] ...?你能举个简单的例子吗? –

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 
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(); 
+0

感谢您的回答,但我上面的注释中的数组只是一个示例。我要处理的数组对象,而不是整数 –

+0

@ 3D-kreativ然后用另一个类,比如'名单<名单>' –

+0

OK更换'Integer'在上面的代码,但我想知道我是怎么和为这个类设置值,它是数组列表? –

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); 
} 

现在你有一个size X size ArrayList的与你的类实例

访问它:

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

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

2dList.get(rowIndex).remove(columnIndex); 
2dList.get(rowIndex).add(columnIndex, newYourClass);