我可以在Java中创建一个ArrayList的ArrayList吗?

4

我希望将用户的输入存储到一个ArrayList中,然后将该ArrayList放入另一个ArrayList中。就像一个包含数据的子类别的主要类别。

以下是部分代码:

    ArrayList<String> mainCat = new ArrayList<>();
    ArrayList<String> subCat = new ArrayList<>();

我能添加“subCat” ArrayList到“mainCat” ArrayList中吗?

4
您希望数据结构反映主类别->子类别层次结构吗?也许一个 Map<String, List<String>>(将主类别映射为子类别列表)会是一个更好的选择。 - Mick Mnemonic
我同意Mic的观点,在这种情况下,使用地图可能是更好的选择。 - alcfeoh
@MickMnemonic 为什么使用映射?因为它可以解决冲突问题,同时可以更快地查找任何ArrayList类型的字符串。 - Kick Buttowski
@MickMnemonic 我一直试图避免使用 Map 或 HashMap,但我想这只是我变懒了。 - Max Echendu
@KickButtowski,不是的,因为地图非常适合构建分层(树状)模型,就像OP的示例所代表的那样。 - Mick Mnemonic
@MaxEchendu,如果您添加一些示例数据并说明您打算如何使用主类别和子类别列表,您可能会得到更好的答案。您当前的帖子只有两个列表,它们在任何方式上都没有链接在一起,这使得难以理解实际的预期用途。 - Mick Mnemonic
4个回答

6
当然可以!与其他ArrayList一样添加它,只不过类型应该是ArrayList<String>
ArrayList<ArrayList<String>> mainCat = new ArrayList<ArrayList<String>>();
ArrayList<String> subCat = new ArrayList<>();
mainCat.add(subCat);

1
为什么不呢?但是您需要稍微更改mainCat的定义:
List<List<String>> mainCat = new ArrayList<List<String>>();

因为 mainCat 集合中的项不是字符串,而是集合。


你的列表应该有一个类型,不是吗?感觉很原始? - Kick Buttowski
@KickButtowski 你在说什么?他的第一个列表使用 List 作为类型参数,第二个列表使用 String。两者都指定了类型参数。 - Dioxin
@VinceEmigh 他编辑了他的回答。 - Kick Buttowski

1

我会使用Map来实现这个目的,因为它可以更容易地查找基于主分类的子分类。如果您使用List<List<String>>,您实际上无法确定给定的子分类属于哪个主分类。下面是一个使用TreeMap的示例(其中自动按字母顺序保留主类别):

Map<String, List<String>> mainCategories = new TreeMap<>();
mainCategories.put("A", Arrays.asList("A1", "A2", "A3"));
mainCategories.put("B", Arrays.asList("B1", "B2"));
mainCategories.put("C", Arrays.asList("C1"));

System.out.println(mainCategories);
System.out.println(mainCategories.get("B"));

这将打印出

{A=[A1,A2,A3],B=[B1,B2],C=[C1]}
[B1,B2]

0

当然可以。

List<List<String>> mainCat = new ArrayList<ArrayList<String>>();
List<String> subCat = new ArrayList<String>();

mainCat.add(subCat);

如果您能够添加良好的解释,我将非常乐意为您投票。 - Kick Buttowski

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接