问题描述:
有n个ArrayList,n不确定,现在想在每个ArrayList里面取一个数据放在另外的ArrayList里面,但是其中第i个ArrayList只能取第一个数据,i也是不确定的。比如现在有3个ArrayList,内容分别为{a,b}{c,d}{e,f},现在如果i为1,则我要得到{a,c,e}{a,c,f}{b,c,e}{b,c,f},请高手指点一下这个小算法如何实现?问题解决立即结贴!
有n个ArrayList,n不确定,现在想在每个ArrayList里面取一个数据放在另外的ArrayList里面,但是其中第i个ArrayList只能取第一个数据,i也是不确定的。比如现在有3个ArrayList,内容分别为{a,b}{c,d}{e,f},现在如果i为1,则我要得到{a,c,e}{a,c,f}{b,c,e}{b,c,f},请高手指点一下这个小算法如何实现?问题解决立即结贴!
2. j!=i时, resultSet[j] 在第j个数组arrLists[j]中
2、通过这个方法每次到一个list里面取值
3、把这个取出来的值放到新的list里面,然后到下一个list里面取值,然后放到需要的list里面,
4、重复第2、3两步,直到所有的n个List全部遍历完成
是这样的么??
2、通过这个方法每次到一个list里面取值
3、把这个取出来的值放到新的list里面,然后到下一个list里面取值,然后放到需要的list里面,
4、重复第2、3两步,直到所有的n个List全部遍历完成
是这样的么??
public class Test {
/**
* 递归选择各个列表中的元素,放到新的列表中;都选择完后进行输出
* @param arrs N个列表组成的数组
* @param list 新列表,存放输出结果
* @param i 固定选择第一个元素的那个列表索引
* @param cur 本次递归要从哪个列表中选择元素
*/
public static void printNewArrays(ArrayList<Character>[] arrs,
ArrayList<Character> list, int i, int cur) {
if(cur==i) cur++;
if(cur<arrs.length) {
ArrayList<Character> curList=arrs[cur];
int size = curList.size();
for(int j=0; j<size; ++j) {
list.set(cur, curList.get(j));
printNewArrays(arrs, list, i, cur+1);
}
} else {
System.out.println(list);
}
}
/**
* 从列表数组中选择元素,放到新数组,并打印新列表
* @param arrs 列表数组
* @param i 哪个列表只选择固定元素
*/
public static void getNewArrays(ArrayList<Character>[] arrs, int i) {
ArrayList<Character> list=new ArrayList<Character>(arrs.length);
for(int k=0; k<arrs.length; ++k) list.add('*');
if(i>=0 && i<arrs.length) {
list.set(i, arrs[i].get(0));
printNewArrays(arrs, list, i, 0);
}
}
/** 初始化这段挺烦人的,这么写看着就难受... */
public static void arrsTest() {
final int ARRAY_COUNT = 3;
ArrayList<Character>[] arrs = new ArrayList[ARRAY_COUNT];
arrs[0]=new ArrayList<Character>(2);
arrs[1]=new ArrayList<Character>(2);
arrs[2]=new ArrayList<Character>(2);
arrs[0].addAll(Arrays.asList('a','b'));
arrs[1].addAll(Arrays.asList('c','d'));
arrs[2].addAll(Arrays.asList('e','f'));
getNewArrays(arrs, 1);
}
public static void main(String[] args) {
arrsTest();
}
}