【问题标题】:Multidimensional Arraylist pairing多维 Arraylist 配对
【发布时间】:2023-03-11 13:35:02
【问题描述】:

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

  1. Arraylist1:mainCategory(称之为 mainCat)
  2. Arraylist2: subCategory(称之为 subCat)
  3. 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”,使其看起来像上面的示例。谢谢。

标签: java arrays oop arraylist


【解决方案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);

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-04-08
    • 1970-01-01
    • 2017-08-20
    • 1970-01-01
    • 2019-01-25
    • 2014-12-21
    • 2013-09-21
    • 1970-01-01
    相关资源
    最近更新 更多