多维 Arraylist 配对

Posted

技术标签:

【中文标题】多维 Arraylist 配对【英文标题】:Multidimensional Arraylist pairing 【发布时间】:2016-06-05 03:31:19 【问题描述】:

我目前正在学习 Java,但在使用多维 Arraylist 时遇到了障碍。我有 3 个主要的数组(列表),我想建立某种关系。

    Arraylist1:mainCategory(称之为 mainCat) Arraylist2: subCategory(称之为 subCat) Arraylist3:主持人(称其为 mod)

我正在尝试创建一个如下所示的 3Darraylist:

[
  [[mainCat1, subCat1, subCat2, subCat3], [mod1, mod2, mod3, mod4]],
  [[mainCat2, subCat1, subCat2], [mod1, mod2, mod3]],
  [[mainCat3, subCat1, subCat2, subCat3, subCat4], [mod1, mod2, mod3, mod4, mod5]],
]

我尝试过使用:

ArrayList<ArrayList<ArrayList<String>>> my3dArraylist = new ArrayList<ArrayList<ArrayList<String>>>();

但我只是无法理解更多的单维数组列表。

我想使用 '.add' 用数据填充 'my3dArraylist' 以使其看起来像上面的示例,我该怎么做?

【问题讨论】:

您的问题是什么?你说你不明白,但你想做什么? 抱歉,我可能不是很清楚。我想使用“.add”用数据填充“my3dArraylist”,使其看起来像上面的示例。谢谢。 【参考方案1】:

老实说,我不认为使用 3 维 arrayList 是一种干净的做法。也许您应该为您的功能查看其他一些设计。如果您能阐明您想要达到的目标,我们或许可以提供更多帮助。

当然有可能!下面是一个工作代码示例:

public static <E> List<List<List<E>>> create(int dim1, int dim2, int dim3)

    List<List<List<E>>> list1 = new ArrayList<List<List<E>>>(dim1);
    for (int i = 0; i < dim1; i++)
    
        List<List<E>> list2 = new ArrayList<List<E>>(dim2);
        for (int j = 0; j < dim2; j++)
        
            List<E> list3 = new ArrayList<E>(dim3);
            for (int k = 0; k < dim3; k++)
            
                list3.add(null);
            
            list2.add(list3);
        
        list1.add(list2);
    
    return list1;

参考:http://www.coderanch.com/t/431507/java/java/Dimensional-ArrayList

祝你好运

【讨论】:

尼克,感谢您的回复。老实说,我想知道该领域专家的最佳方法。我建立了一个类别(和子类别)列表,它的大小既灵活又可以为每个类别分配主持人。我还想随时检索每个(子)类别的版主,有点像“配对”的方式。 我认为即使工作量更大,您也应该开始考虑更多面向对象。您可以轻松地制作主持人、类别和子类别对象。在 Category 中制作 SubCategories 列表,在 moderator 中制作类别列表。之后,您还可以通过将其添加为属性来从类别类中询问版主!【参考方案2】:

如果你想在这里手动操作它,你去

初始化变量

        ArrayList<String> mainCategory = new ArrayList<>();
        ArrayList<String> moderator = new ArrayList<>();
        ArrayList<String> subCategory = new ArrayList<>();

        ArrayList<ArrayList<ArrayList<String>>> array3d = new ArrayList<>();

        ArrayList<ArrayList<String>> array2dFirstRow= new ArrayList<>();
        ArrayList<ArrayList<String>> array2dSecondRow= new ArrayList<>();
        ArrayList<ArrayList<String>> array2dthirdRow= new ArrayList<>();

        ArrayList<String> firstRowFirstColumn = new ArrayList<>();
        ArrayList<String> firstRowSecondColumn = new ArrayList<>(); 
        ArrayList<String> secondRowFirstColumn = new ArrayList<>();
        ArrayList<String> secondRowSecondColumn = new ArrayList<>();
        ArrayList<String> thirdRowFirstColumn = new ArrayList<>();
        ArrayList<String> thirdRowSecondColumn = new ArrayList<>();

构造第一个一维内部数组[mainCat1, subCat1, subCat2, subCat3]

    firstRowFirstColumn.add(mainCategory.get(0));
    firstRowFirstColumn.add(subCategory.get(0));
    firstRowFirstColumn.add(subCategory.get(1));
    firstRowFirstColumn.add(subCategory.get(2));

构造第二个一维内部数组[mod1, mod2, mod3, mod4]

    firstRowSecondColumn.add(moderator.get(0));
    firstRowSecondColumn.add(moderator.get(1));
    firstRowSecondColumn.add(moderator.get(2));
    firstRowSecondColumn.add(moderator.get(3));

构造第一个二维数组 [[mainCat1, subCat1, subCat2, subCat3], [mod1, mod2, mod3, mod4]]

    array2dFirstRow.add(firstRowFirstColumn);
    array2dFirstRow.add(firstRowSecondColumn);

构造第三个一维数组 [mainCat2, subCat1, subCat2]

    secondRowFirstColumn.add(mainCategory.get(1));
    secondRowFirstColumn.add(subCategory.get(0));
    secondRowFirstColumn.add(subCategory.get(1));

构造第四个一维数组 [mod1, mod2, mod3]

    secondRowSecondColumn.add(moderator.get(0));
    secondRowSecondColumn.add(moderator.get(1));
    secondRowSecondColumn.add(moderator.get(2));

构造第二个二维数组 [mod1, mod2, mod3]

    array2dSecondRow.add(secondRowFirstColumn);
    array2dSecondRow.add(secondRowSecondColumn);

构造 3D 数组

[ [[mainCat1, subCat1, subCat2, subCat3], [mod1, mod2, mod3, mod4]], [[mainCat2, subCat1, subCat2], [mod1, mod2, mod3]] ]

    array3d.add(array2dFirstRow);
    array3d.add(array2dSecondRow);

现在您可以继续构建,直到最终得到您想要的列表

【讨论】:

以上是关于多维 Arraylist 配对的主要内容,如果未能解决你的问题,请参考以下文章

C#多维数组,ArrayList,还是哈希表?

C#中数组与ArrayList的简单使用

Java - 迭代 ArrayList 并查找 Anagrams

数组的Java ArrayList?

Java ArrayList IndexOutOfBoundsException 索引:1,大小:1

java list和数组的区别