有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何创建一个类来处理多维arraylist

在我搜索多维arraylist信息的过程中,我了解到可以创建一个类来处理多维arraylist

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

但是我不确定一个类会是什么样子,以及如何从ArrayList中设置和获取值?有没有人有兴趣解释它是如何工作的,并展示一个简单的代码示例?谢谢

编辑:我希望在ArrayList中有对象,如本例int grid[][] = new int[8][8];,但我希望有对象,而不是整数。我想知道是否有可能像我刚才展示的例子一样轻松地获取和设置值

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


共 (4) 个答案

  1. # 1 楼答案

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

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

     Node node = list.get(0).get(1); // access the Node at 0,1
     node.getProperties();
    
  2. # 2 楼答案

    首先从定义多维arrayList开始

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

    现在您有了一个带有类实例的sizexsize数组列表

    要访问它:

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

    如果要将某个位置上的对象替换为另一个实例,则需要先删除旧对象:

    2dList.get(rowIndex).remove(columnIndex);
    2dList.get(rowIndex).add(columnIndex, newYourClass);
    
  3. # 3 楼答案

    ArrayList和array之间没有太大区别

    ArrayList只有两个优点:

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

    对于多维数组,另一个优点是嵌套数组列表可能有不同的长度

    在您的情况下,我认为您不需要这些,所以如果您不知道如何制作ArrayList of 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 
    
  4. # 4 楼答案

    List<List<Integer>> multiList = new ArrayList<List<Integer>>();
    multiList.add(new ArrayList<Integer>());
    Integer element = multi.get(0).get(0); // element at 0,0