「java数组对象递归」js递归处理一个多层对象数组

博主:adminadmin 2023-01-17 07:27:06 505

本篇文章给大家谈谈java数组对象递归,以及js递归处理一个多层对象数组对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

java 算法设计 多数组递归操作

import java.util.ArrayList;

import java.util.Arrays;

import java.util.List;

public class ArrayAssemble {

@SuppressWarnings("unchecked")

public static void main(String[] args) {

Integer[] arrOfInt = { 1, 2, 3 };

@SuppressWarnings("unused")

Character[] arrOfChar1 = { 'a', 'b', 'c' };

@SuppressWarnings("unused")

Character[] arrOfChar2 = { '!', '@', '#' };

String[] arrOfStr = { "lmy", "lyb", "mz", "yx" };

System.out.println("以下是组合后的数组");

// List arrayList = assembleArraysToList(arrOfInt);

// for (int n = 0; n arrayList.size(); n++) {

// Object obj = arrayList.get(n);

// if (obj instanceof Object[]) {

// Object[] objArr = (Object[]) obj;

// System.out.println(Arrays.toString(objArr));

// } else {

// System.out.println(obj);

// }

//

// }

Object[][] objectsArrays = assembleArraysToPlanerArray(new Object[][] {

arrOfInt, arrOfChar1, arrOfChar2, arrOfStr });

for (Object[] objArrays : objectsArrays) {

System.out.println(Arrays.toString(objArrays));

}

}

// 方法一:使用可变参数方法返回数组类型的List

@SuppressWarnings("unchecked")

public static List assembleArraysToList(Object[]... objects) {

List arrayList = new ArrayList();

// 遍历方法的参数

for (int i = 0; i objects.length; i++) {

if (i == 0) {

// 对于第一个数组参数,先将其转变成List类型,以便能使用辅助方法进行处理

arrayList = Arrays.asList(objects[i]);

} else {

// 对从第二个参数开始的数组与前面组合过的列表进行组合

arrayList = assembleArrayToList(arrayList, objects[i]);

}

}

return arrayList;

}

// 方法一的辅助方法:将一个数组类型或对象类型的List与数组组合,并返回List

@SuppressWarnings("unchecked")

public static List assembleArrayToList(List aList, Object[] array) {

List arrList = new ArrayList();

// 遍历aList,将array与aList进行组合

for (int i = 0; i aList.size(); i++) {

Object obj = aList.get(i);

// 检查aList的元素是否是数组类型的,如果不是,则直接产生组合列表

if (obj instanceof Object[]) {

Object[] listArr = (Object[]) obj;

// 对数组类型的aList元素与array进行组合

for (int k = 0; k array.length; k++) {

Object[] newListArr = new Object[listArr.length + 1];

for (int j = 0; j listArr.length; j++) {

newListArr[j] = listArr[j];

}

newListArr[listArr.length] = array[k];

arrList.add(newListArr);

}

} else {

// 对非数组类型的aList元素与array进行组合

for (int j = 0; j array.length; j++) {

Object[] arrObj = { aList.get(i), array[j] };

arrList.add(arrObj);

}

}

}

return arrList;

}

// 方法二:使用二维数组参数方法返回组合的二维数组类型,并使用了递归

@SuppressWarnings("unchecked")

public static Object[][] assembleArraysToPlanerArray(Object[][] objectArrays) {

if (objectArrays.length == 2) {

Object[] assembledArray = objectArrays[0];

Object[] array = objectArrays[1];

return assembleArrayToArray(assembledArray, array);

} else if (objectArrays.length = 1) {

return objectArrays;

} else {

Object[] objArray = objectArrays[objectArrays.length - 1];

objectArrays = Arrays.copyOf(objectArrays, objectArrays.length - 1);

return assembleArrayToArray(

assembleArraysToPlanerArray(objectArrays), objArray);

}

}

// 方法二的辅助方法:将一个数组类型或二维数组类型与数组组合,并返回二维数组

public static Object[][] assembleArrayToArray(Object[] assembledArray,

Object[] array) {

int lenAssArray = assembledArray.length;

int lenArray = array.length;

Object[][] objArrays = new Object[lenAssArray * lenArray][];

for (int i = 0; i lenAssArray; i++) {

Object obj = assembledArray[i];

if (obj instanceof Object[]) {

Object[] objArr = (Object[]) obj;

int lenObjArr = objArr.length;

for (int k = 0; k lenArray; k++) {

// 复制objArr数组到newListArr数组,并将其长度加一

Object[] newListArr = Arrays.copyOf(objArr, lenObjArr + 1);

//将array数组的第k+1元素赋值给newListArr数组最后的元素,并将newListArr赋值给objArrays数组的第k+1个元素

newListArr[lenObjArr] = array[k];

objArrays[lenArray * i + k] = newListArr;

}

} else {

for (int j = 0; j lenArray; j++) {

Object[] newObjArray = { obj, array[j] };

objArrays[lenArray * i + j] = newObjArray;

}

}

}

return objArrays;

}

}

//我自己写的方法,用了一天的时间,希望能够采纳,对了,运行环境是JDK1.6

Java给定数组,用递归方法判定是否有序

public class Main {

public static void main(String[] args) {

int []A={1,2,3};

System.out.println(isArrayInSortedOrder(A,A.length));

}

//1.给定一个数组,用递归方法判定数组元素是否有序

static int isArrayInSortedOrder(int[] A, int index){

if (A.length==1) return 1;

return (A[index-1]=A[index-2])?0:isArrayInSortedOrder(A,index-1);

}

}

java中递归算法是什么怎么算的?

一、递归算法基本思路:

Java递归算法是基于Java语言实现的递归算法。递归算法是一种直接或者间接调用自身函数或者方法的算法。递归算法实质是把问题分解成规模缩小的同类问题的子问题,然后递归调用方法表示问题的解。递归往往能给我们带来非常简洁非常直观的代码形式,从而使我们的编码大大简化,然而递归的思维确实跟我们的常规思维相逆的,通常都是从上而下的思维问题,而递归趋势从下往上的进行思维。

二、递归算法解决问题的特点:

【1】递归就是方法里调用自身。

【2】在使用递归策略时,必须有一个明确的递归结束条件,称为递归出口。

【3】递归算法代码显得很简洁,但递归算法解题的运行效率较低。所以不提倡用递归设计程序。

【4】在递归调用的过程中系统为每一层的返回点、局部量等开辟了栈来存储。递归次数过多容易造成栈溢出等,所以一般不提倡用递归算法设计程序。

【5】在做递归算法的时候,一定把握出口,也就是做递归算法必须要有一个明确的递归结束条件。这一点是非常重要的。其实这个出口就是一个条件,当满足了这个条件的时候我们就不再递归了。

三、代码示例:

public class Factorial {

    //this is a recursive function

    int fact(int n){

        if (n==1) return 1;

        return fact(n-1)*n;

    }

     

}

     public class TestFactorial {

 

    public static void main(String[] args) {

        // TODO Auto-generated method stub

        Factorial factorial=new Factorial();

        System.out.println("factorial(5)="+factorial.fact(5));

    }

}

代码执行流程图如下:

此程序中n=5就是程序的出口。

java 递归替换复杂对象属性值

本示例中又三个对象嵌套:

UserBO:复杂对象,其中一个属性是ListAddressBO或者MapAddressBO

AddressBO:其中一个属性是SubAddressBO

SubAddressBO:包含目标属性addrId,且是string类型,查找addrId的值

任务:UserBO是一个复杂对象,该对象中肯定存在目标属性addrId(String类型,递归方法只能找string类型的属性,找其他类型自行修改代码),只是不知道addrId在哪个子属性中,如果UserBO存在多个addrId属性,那么只遍历出遇到的第一个addrId的值即可。

注意:(本例子在遍历复杂对象时,如果找到第一个目标属性,则退出,不在继续遍历,后面bolg有遍历复杂对象所有属性的文章)

1、本示例提供了两种方法来获取复杂对象中指定属性的值,一种是利用递归,另一种是直接把复杂对象转换成json串,再截取。

  2、本示例对于复杂对象中不包含目标属性时,会返回空字符串。

  3、目标属性可以存在于自定义类、list、map、数组中

  4、复杂对象可以是复杂嵌套的BO/ListBO/MapObject,BO,目标属性存在于BO中

  5、对于复杂对象是这种嵌套格式(ListListBO/ListMapObject,BO/MapObject,ListBO)的没有做测试

————————————————

版权声明:本文为CSDN博主「一路奔跑1314」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:

java数组对象递归的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于js递归处理一个多层对象数组、java数组对象递归的信息别忘了在本站进行查找喔。