Java初学者求助:如何从方法中返回多个ArrayList?
嘿,我完全懂你现在的卡点!作为Java新手,刚接触集合拆分和方法返回值的时候,确实容易摸不清头绪。我来给你拆解一下怎么解决这个问题,分步骤来~
首先,先理清楚核心逻辑:把输入的元素按索引奇偶拆分到两个ArrayList,然后让其他方法能拿到这两个集合对吧?Java里方法没法直接返回两个独立的集合,所以我们有几种实用的方案,我给你一一演示:
方案1:自定义一个结果类(最推荐,语义清晰)
这种方式最规范,后续维护代码的时候一眼就能看懂返回的是什么。
首先,我们先写一个简单的类,用来封装我们要返回的两个集合:
// 这个类专门用来装拆分后的两个集合,名字可以根据你的业务调整,比如叫SplitResult或者InputSplit class SplitResult { // 对应偶数索引的元素集合(radie/nominator) private ArrayList<Integer> evenElements; // 对应奇数索引的元素集合(height/denominator) private ArrayList<Integer> oddElements; // 构造方法,初始化两个集合 public SplitResult(ArrayList<Integer> evenElements, ArrayList<Integer> oddElements) { this.evenElements = evenElements; this.oddElements = oddElements; } // Getter方法,让其他方法能获取到里面的集合 public ArrayList<Integer> getEvenElements() { return evenElements; } public ArrayList<Integer> getOddElements() { return oddElements; } }
然后写你的拆分方法,返回这个自定义类:
// 假设用户输入的是一个List<Integer>,你也可以根据实际情况改成数组输入 public SplitResult splitInput(List<Integer> inputList) { ArrayList<Integer> radie = new ArrayList<>(); ArrayList<Integer> height = new ArrayList<>(); // 遍历输入列表,按索引奇偶拆分 for (int i = 0; i < inputList.size(); i++) { if (i % 2 == 0) { // 偶数索引(Java索引从0开始,第一个元素索引是0哦) radie.add(inputList.get(i)); } else { // 奇数索引 height.add(inputList.get(i)); } } // 返回封装好的结果对象 return new SplitResult(radie, height); }
接下来,其他方法要调用的时候就很简单了:
// 假设你已经拿到了用户输入的inputList(比如通过Scanner读取的) SplitResult result = splitInput(inputList); // 获取拆分后的两个集合,后续处理nominator和denominator逻辑完全一样 ArrayList<Integer> radie = result.getEvenElements(); ArrayList<Integer> height = result.getOddElements(); // 举个后续方法的例子,比如处理nominator和denominator public void processFractions(SplitResult fractionParts) { ArrayList<Integer> nominator = fractionParts.getEvenElements(); ArrayList<Integer> denominator = fractionParts.getOddElements(); // 这里写你的业务逻辑 }
方案2:返回嵌套List(快速实现,不用额外写类)
如果只是快速测试不想写自定义类,也可以把两个ArrayList放到一个大的List里返回:
public List<List<Integer>> splitInput(List<Integer> inputList) { ArrayList<Integer> radie = new ArrayList<>(); ArrayList<Integer> height = new ArrayList<>(); for (int i = 0; i < inputList.size(); i++) { if (i % 2 == 0) { radie.add(inputList.get(i)); } else { height.add(inputList.get(i)); } } List<List<Integer>> result = new ArrayList<>(); result.add(radie); // 第一个元素是偶数索引集合 result.add(height); // 第二个元素是奇数索引集合 return result; }
调用的时候:
List<List<Integer>> result = splitInput(inputList); ArrayList<Integer> radie = (ArrayList<Integer>) result.get(0); ArrayList<Integer> height = (ArrayList<Integer>) result.get(1);
不过这种方式的缺点是语义不够明确,别人看代码的时候需要记住哪个位置对应哪个集合,所以长期来看还是方案1更靠谱。
最后提醒你一下:Java的索引是从0开始的,如果你需求里的“偶数索引”是从1开始计数的(比如第一个输入值算索引1),那判断条件要改成(i + 1) % 2 == 0哦,别搞混了!
内容的提问来源于stack exchange,提问作者Erik
相关产品推荐
相关产品推荐

