首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在Java中使用递归从和ArrayList中分离偶数和奇数索引

在Java中使用递归从ArrayList中分离偶数和奇数索引,可以按照以下步骤进行操作:

  1. 创建一个递归方法,接收一个ArrayList作为参数,并返回一个包含两个ArrayList的数组,一个用于存储偶数索引的元素,另一个用于存储奇数索引的元素。
代码语言:txt
复制
public static ArrayList[] separateEvenOdd(ArrayList<Integer> list) {
    ArrayList<Integer> evenList = new ArrayList<>();
    ArrayList<Integer> oddList = new ArrayList<>();
    separateEvenOddHelper(list, evenList, oddList, 0);
    return new ArrayList[]{evenList, oddList};
}
  1. 创建一个辅助递归方法,该方法递归地将偶数索引的元素添加到evenList中,将奇数索引的元素添加到oddList中。
代码语言:txt
复制
private static void separateEvenOddHelper(ArrayList<Integer> list, ArrayList<Integer> evenList, ArrayList<Integer> oddList, int index) {
    if (index >= list.size()) {
        return;
    }
    
    if (index % 2 == 0) {
        evenList.add(list.get(index));
    } else {
        oddList.add(list.get(index));
    }
    
    separateEvenOddHelper(list, evenList, oddList, index + 1);
}
  1. 调用separateEvenOdd方法,并打印结果。
代码语言:txt
复制
public static void main(String[] args) {
    ArrayList<Integer> list = new ArrayList<>(Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10));
    ArrayList[] result = separateEvenOdd(list);
    
    System.out.println("偶数索引的元素:" + result[0]);
    System.out.println("奇数索引的元素:" + result[1]);
}

这样,就可以通过递归方法从ArrayList中分离偶数和奇数索引的元素。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Java谈尾递归--尾递归垃圾回收的比较(转载)

我不是故意在JAVA谈尾递归的,因为JAVA谈尾递归真的是要绕好几个弯,只是我确实只有JAVA学得比较好,虽然确实C是在学校学过还考了90+,真学得没自学的JAVA好 不过也是因为要绕几个弯,所以才会有有意思的东西可写...frame ,保存有该方法调用的参数、局部变量返回地址 Java的参数和局部变量只能是 基本类型 的变量(比如 int),或者对象的引用(reference) 。...因此,,只保存有基本类型的变量对象引用。而引用所指向的对象保存在堆。...当引用移除时,计数器减 1,当计数器为0时,认为该对象可以进行垃圾回收 与之相对,尾递归优化的特点是: 优化了递归调用时的内存溢出问题 针对内存的堆空间栈空间 只递归调用的时候使用,而且只能对于写成尾递归形式的递归进行优化...那为什么呢,我看到有的说法是:JAVA编写组不实现尾递归优化是觉得麻烦又没有太大的必要,就懒得实现了(原话是:日程表上,但是非常靠后),官方的建议是不使用递归,而是使用while循环,迭代,递推 转载

1.4K50
  • Spring Bean实例过程,如何使用反射递归处理的Bean属性填充?

    二、目标 首先我们回顾下这几章节都完成了什么,包括:实现一个容器、定义注册Bean、实例化Bean,按照是否包含构造函数实现不同的实例化策略,那么创建对象实例化这我们还缺少什么?...不过这里我们暂时不会考虑 Bean 的循环依赖,否则会把整个功能实现撑大,这样新人学习时就把握不住了,待后续陆续先把核心功能实现后,再逐步完善 三、设计 鉴于属性填充是 Bean 使用 newInstance... applyPropertyValues ,通过获取 beanDefinition.getPropertyValues() 循环进行属性填充操作,如果遇到的是 BeanReference,那么就需要递归获取...当把依赖的 Bean 对象创建完成后,会递归回现在属性填充。这里需要注意我们并没有去处理循环依赖的问题,这部分内容较大,后续补充。...当遇到 Bean 属性为 Bean 对象时,需要递归处理。最后属性填充时需要用到反射操作,也可以使用一些工具类处理。

    3.3K20

    使用JavaXPathXML文档精准定位数据

    在当今数据驱动的世界,能够复杂的文档结构准确地提取信息是一项极具价值的技能。...本篇文章将带您深入了解如何使用JavaXPathXML文档精准定位数据,并通过一个基于小红书的实际案例进行分析。...您需要一个自动化的解决方案,不仅能够准确地找到这些数据,还能够不同网络环境顺利执行(例如,处理反爬虫机制)。这就引出了如何在Java利用XPath技术,实现高效的XML数据提取的问题。...解决方案使用JavaXPath来提取XML数据是一个经过验证的高效解决方案。...XPath数据提取:通过XPath表达式精准定位并提取XML文档的数据,示例中提取了指定产品的名称。结论通过结合JavaXPath技术,您可以轻松实现对XML文档数据的精准定位提取。

    10810

    知识分享之Java——IDEA安装maven helper相关使用

    知识分享之Java——IDEA安装maven helper相关使用 背景 日常我们开发时,我们会遇到各种各样的奇奇怪怪的问题(踩坑o(╯□╰)o),这个常见问题系列就是我日常遇到的一些问题的记录文章系列...,这里整理汇总后分享给大家,让其还在深坑的小伙伴有绳索能爬出来。...开发环境 系统:windows10 JDK:openjdk11 开发工具:IDEA 教育版 框架:SpringBoot 包管理:Gradle 内容 日常进行Java项目开发时我们经常使用maven,而...maven包管理时有时我们会出现包冲突的情况,这时我们需要在pom.xml增加exclusion标签进行剔除,当比较多时这类剔除就很繁琐,idea组件库的maven helper就可以有效帮我们解决这个问题...image.png 是不是方便了很多~请大家持续关注,我会进行整理更多开发中有趣的组件各种各样的知识,我们一起共同成长学习。

    78130

    nextline函数_JAVAScanner的next()nextLine()为什么不能一起使用

    Java 输入一直是一个坑,本来一直用 Scanner,但一直搞不懂换行符啥的,就用 BufferReader ,但前不久大疆笔试需要持续输入,早忘了 Scanner 怎么写,而那个场景用 Scanner...: 输入 1: 2 abc cba 结果 1: str[0] = “abc” str[1] = “cba” 原因:next() 方法遇到有效字符前所遇到的空格、tab 键、enter 键都不能当作结束符...不是预期的 “abc cba” “efg gfe” 2. nextLine 使用举例: 输入 1: 2 abc cba 结果 1: str[0] = “” str[1] = “abc” 原因:以回车...回车符 “\r” 它被丢弃缓冲区,现在缓冲区,只有一个 \r ,于是 下一次 nextLine 扫描的时候就又扫描到了 \r,返回它之前的内容,也是啥都没有 “” ,然后再把 \r 去掉, 对于...这个扫描器扫描过程判断停止的依据就是“结束符”,空格,回车,tab 都算做是结束符 而坑点在于 next 系列的,也就是下面这些函数:next nextInt nextDouble nextFloat

    2.7K10

    【数组知识的扩展①】

    ArrayListJava数组使用技巧 这篇博客灵感来源于某一天Aileen()遇到了一道数组合并的题,于是她按照自己的思路把这道题的解题过程写了下来,如下图所示: 她的想法是想把奇数偶数分别用两个数组装起来再把它们合并在一个新的数组里面...中找到了一个内置类,即 `ArrayList` , 下面我们将进入ArrayList的学习: ArrayList:这个类是Java内置的一个类它继承了Java的AbstractList并实现了List...类的方法用到我们解决这道题的思路上吧~ 学以致用 使用ArrayList(单线程常用)解决问题 import java.util.ArrayList; import java.util.Arrays;...数组用于储存 奇数偶数 的数组 //偶数数组 ArrayList evenList = new ArrayList(); //奇数数组...However`ArrayList`不是线程安全的,多线程环境,如果多个线程同时对同一个`ArrayList`修改,可能会导致数据不一致,或者抛出异常,如果想在多线程环境中使用`ArrayList`

    10210

    【数据结构算法】奇偶链表

    一、题目描述 给定单链表的头节点 head ,将所有索引奇数的节点索引偶数的节点分别组合在一起,然后返回重新排序的列表。...第一个节点的索引被认为是 奇数 , 第二个节点的索引偶数 ,以此类推。 请注意,偶数奇数组内部的相对顺序应该与输入时保持一致。...因此可以将奇数节点偶数节点分离奇数链表偶数链表,然后将偶数链表连接在奇数链表之后,合并后的链表即为结果链表。...通过迭代的方式将奇数节点偶数节点分离成两个链表,每一步首先更新奇数节点,然后更新偶数节点。...在上述操作之后,即完成了对一个奇数节点一个偶数节点的分离。重复上述操作,直到全部节点分离完毕。

    17710

    Java 使用Runtime一个Java程序启动关闭另一个Java程序

    bufrIn = null; BufferedReader bufrError = null; try { // 执行命令, 返回一个子进程对象(命令子进程执行...)使用这种方式可以使用|管道符命令 process = Runtime.getRuntime().exec(new String[]{"/bin/bash", "-c", cmd...// 方法阻塞, 等待命令执行完成(成功会返回0) process.waitFor(); // 获取命令执行结果, 有两个结果: 正常的输出 ...启动的process,不能直接执行java、jps等命令,也获取不到环境变量,会报command not found 于是我使用来System.getProperty("java.home") 来获取到执行当前程序的...Java路径,再把jre目录替换为jdk目录,使用jdk目录下bin目录java及jps命令,可以达到需求 另外需要注意命令字符串的空格很重要,不能忽略

    2.3K51

    【Day28】力扣算法(超详细思路+注释)

    最开始,我们应该先判断两个字符串s1s2是否相等,相等就直接返回true即可。...奇偶链表 题目描述: 给定单链表的头节点 head ,将所有索引奇数的节点索引偶数的节点分别组合在一起,然后返回重新排序的列表。...第一个节点的索引被认为是 奇数 , 第二个节点的索引偶数 ,以此类推。 请注意,偶数奇数组内部的相对顺序应该与输入时保持一致。...题目要求我们将所有奇数节点连在一块,所有偶数节点连在一块,且奇数连链表于偶数链表拼接。 必须在 O(1) 的额外空间复杂度 O(n) 的时间复杂度下解决这个问题。...因为奇数偶数是交替的,也就是奇数下一个节点为偶数偶数下一个节点为奇数。我们就可以将所有奇数节点指向其后偶数节点的下一节点,偶数节点也指向其后奇数节点的下一个节点。

    43130

    LeetCode-498-对角线遍历

    # LeetCode-498-对角线遍历 给定一个含有 M x N 个元素的矩阵(M 行,N 列),请以对角线遍历的顺序返回这个矩阵的所有元素,对角线遍历如下图所示。...示例: 输入: [ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 7, 8, 9 ] ] 输出: [1,2,4,7,5,3,6,8,9] 说明: 给定矩阵的元素总数不会超过 100000...# 解题思路 方法1、模拟路径,观察图可以知道对角线位置的横纵坐标之和等于第一行的该对角线元素索引号,以第一行为例,奇数往右上走,偶数往左下走,对于越界的不添加,将他按左下或右上移动,直到到矩阵位置里面进行添加...运行时间7ms 还有一些其他更简单的方法,时间空间上消耗都比较少,可以右转leetcode看看~ # Java代码1 public static int[] findDiagonalOrder(int...代码2 public static int[] findDiagonalOrder(int[][] matrix) { // 按索引坐标分为奇数偶数情况,奇数右上走,偶数左下走,当前行数+当前列数

    40720

    剑指offer(01-15题)优化题解

    当然,java中直接使用replaceAll即可。...我们都知道一个序序列带着一个前序或者后序序列都能确定一棵完整的二叉树。首先分析这种问题。二叉树的问题大部分有可重复性,经常会使用递归。所以大部分人应该能够想到使用递归,但是可能不清楚该怎么递归。...其实递归使用不需要你考虑全篇,需要你谨慎完整的考虑其中一个过程。现在我们看看前序遍历序列{1,2,4,7,3,5,6,8}序遍历序列{4,7,2,1,5,3,8,6},的构造过程!...题目描述 输入一个整数数组,实现一个函数来调整该数组数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数奇数偶数偶数之间的相对位置不变。...思路: 题目要求1、奇数位于偶数前面2、奇数之间相对位置不变。 注意事项: void函数,注意对象克隆,深浅拷贝。如果是java最好先了解java函数调用参数(指针)问题。

    49520

    java面试题 --- 集合

    1. java 集合你了解吗?...java 集合最顶层接口是 Collection Map; Collection 有三个核心接口,分别是 List,Set,Queue; List 是有序可重复的,它的主要实现类有 ArrayList...、LinkedList Vector; ArrayList 是数组实现的,查询快增删慢线程不安全; LinkedList 是链表实现的,查询慢增删快线程不安全; Vector 相当于线程安全的 ArrayList...,奇数计算最后结果是奇数偶数计算的结果是偶数,如果最后一位是 0,那么不管奇数还是偶数进行与 (&) 计算的结果都是偶数,不能保证散列分布均匀。...拿到索引后,先判断索引位置是否有元素,如果没有,直接把元素放到索引位置; 如果有,判断 key 是否一样,如果一样,新值覆盖旧值; 如果不一样,就在此处生成链表,元素存到链表。 10.

    28420

    每天一道剑指offer-调整数组顺序使奇数位于偶数前面

    昨天的题解 题目 每天一道剑指offer-调整数组顺序使奇数位于偶数前面 来源:牛客网对应专题 题目详述 输入一个整数数组,实现一个函数来调整该数组数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分...,并保证奇数奇数偶数偶数之间的相对位置不变。...题目详解 思路 题目明确说了,不能修改相对位置,所以只能是用以下的新建两个数组,一个奇数数组,一个偶数数组,然后把奇数偶数分别保存到对应的数组,然后赋值到原数组 代码 import java.util.ArrayList...++) { if(array[i] % 2 == 1) { odd.add(array[i]);//加入奇数数组...}else { even.add(array[i]);//加入偶数数组 } }

    32920

    剑指Offer-数据流的中位数

    题目描述 如何得到一个数据流的中位数?如果数据流读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值。如果数据流读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值。...思路 思路一: 维护一个数组,每次加入后,进行排序,当总元素个数为奇数时,中位数就是数组中间的元素;当总元素个数为偶数时,中位数就是数组中间元素前一个元素的平均数。...,使大顶堆个数跟小顶堆个数一样; 当总元素个数为奇数时,中位数就是小顶堆堆顶;当总元素个数为偶数时,中位数就是两个个堆堆顶平均数。...代码实现 package Tree; import java.util.ArrayList; import java.util.Collections; import java.util.PriorityQueue...如果数据流读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值。 * 如果数据流读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值。

    70240
    领券