Java初学者求助:如何初始化指定大小的嵌套ArrayList存储不同ID
解决方案:初始化嵌套ArrayList并按类型存储ID
嘿,作为Java初学者,你的需求很清晰——要一个外层ArrayList来分别存不同宠物的ID,而且得预先准备好位置,不管ID过来的顺序如何都能直接对应存入。这其实很容易实现,我来一步步给你讲:
第一步:初始化外层ArrayList并填充空的子列表
首先得明确:Java的ArrayList构造器里的数字是初始容量,不是固定大小。也就是说,new ArrayList<>(3)只是给外层列表预分配了能装3个元素的空间,但它的实际size()还是0。所以你需要手动往外层列表里添加3个空的ArrayList<Integer>,这样每个宠物类型就有对应的索引位置了:
// 外层列表,初始容量设为3(可选,但能提升效率) ArrayList<ArrayList<Integer>> petIdLists = new ArrayList<>(3); // 为每个宠物类型添加空的子列表:索引0=狗,1=猫,2=蜥蜴 petIdLists.add(new ArrayList<>()); petIdLists.add(new ArrayList<>()); petIdLists.add(new ArrayList<>());
第二步:按类型存入ID
现在不管ID的顺序是什么,你只要判断这个ID属于哪种宠物,就往对应的索引位置的子列表里加就行。比如:
// 假设随机拿到的ID和宠物类型 int randomId = 123; String petType = "狗"; // 也可能是"猫"或"蜥蜴" // 根据类型存入对应列表 switch(petType) { case "狗": petIdLists.get(0).add(randomId); break; case "猫": petIdLists.get(1).add(randomId); break; case "蜥蜴": petIdLists.get(2).add(randomId); break; default: // 处理未知类型的情况 System.out.println("未知宠物类型:" + petType); }
可选优化:用枚举提升可读性
如果怕记混索引(比如哪天忘了索引0是狗还是猫),可以用枚举来对应宠物类型,代码会更清晰,也不容易出错:
// 定义宠物类型枚举 enum PetType { DOG, CAT, LIZARD } // 存入的时候用枚举的ordinal()获取对应索引 int id = 456; PetType type = PetType.CAT; petIdLists.get(type.ordinal()).add(id);
注意事项
- 千万不要直接用
petIdLists.get(0)如果外层列表里还没添加子列表,那样会抛出IndexOutOfBoundsException,所以必须先把3个空的子列表都加进去才能通过索引访问。 - 子列表本身是动态的,你可以往里面加任意数量的ID,ArrayList会自动扩容,不用手动处理容量问题。
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

