求教!关于List类型数据的排列组合

xiaobinsz 2018-08-14 04:04:26
例如数据为[[1, 2, 3, 4], [A, B, C, D]] ,需要组合出来[1,A]、[1、B]......这种排列,List的长度是不定的,这种要如何生成动态的排列结果,之前想过用递归来做,但没写出来==
...全文
338 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
threenewbee 2018-08-16
  • 打赏
  • 举报
回复
不需要递归,给你一点提示,首先尝试编写如下函数
伪代码如下:
List<string> Combo(List<string> list1, List<string> list2)
{
List<string> result = new List<string>();
for (string s: list1)
for (string item: list2)
result.add(item + "," + s);
return result;
}
那么假如有list1 list2 list3 list4
组合的代码就是
List<List<string>> list = new List<List<string>>();
list.add(list2);
list.add(list3);
list.add(list4);

result = list1;
for (List<string> item : list)
result = Combo(result, item);
xiaobinsz 2018-08-15
  • 打赏
  • 举报
回复
这种效果是在数据已知的情况下,我的问题就是因为不确定会有多少个数据才比较难搞的
松鼠不是鼠 2018-08-15
  • 打赏
  • 举报
回复
private static  List demo(String[] number, String[] letter){
Arrays.sort(number);
Arrays.sort(letter);
List<String[]> list=new ArrayList();
String[] longArray;
String[] shortArray;
if(number.length>letter.length){
longArray=number;
shortArray=letter;
}else{
longArray=letter;
shortArray=number;
}
for (int i=0;i<shortArray.length;i++
) {
String[] array=new String[2];
array[0]=number[i];
array[1]=letter[i];
list.add(array);
}
return list;
}

public static void main(String[] args) {
String[] number = {"1", "3", "2","5","4"};
String[] letter = {"A", "D", "B", "C", "E","H","G"};
List<String[]> list=demo(number,letter);
System.out.println();
}


应该还有更好的办法,我这样的办法对数组有点限制,不知道是不是你想要的,应该有所出入
松鼠不是鼠 2018-08-15
  • 打赏
  • 举报
回复
引用 4 楼 u013845168 的回复:
private static  List demo(String[] number, String[] letter){
Arrays.sort(number);
Arrays.sort(letter);
List<String[]> list=new ArrayList();
String[] longArray;
String[] shortArray;
if(number.length>letter.length){
longArray=number;
shortArray=letter;
}else{
longArray=letter;
shortArray=number;
}
for (int i=0;i<shortArray.length;i++
) {
String[] array=new String[2];
array[0]=number[i];
array[1]=letter[i];
list.add(array);
}
return list;
}

public static void main(String[] args) {
String[] number = {"1", "3", "2","5","4"};
String[] letter = {"A", "D", "B", "C", "E","H","G"};
List<String[]> list=demo(number,letter);
System.out.println();
}


应该还有更好的办法,我这样的办法对数组有点限制,不知道是不是你想要的,应该有所出入

不好意思看错了,你说的是list<list<>>,你把里面的String[]改一下试试
Super_King_ 2018-08-14
  • 打赏
  • 举报
回复
不知道你要的是不是这种效果,希望能帮到你
public class TestArrayList {

public static void main(String[] args) {

String[] number = {"1", "2", "3", "4", "5"};

String[] letter = {"A", "B", "C", "D", "E"};

for (int i = 0; i < number.length; i++) {
String str = number[i] + "," + letter[i];
System.out.println(str);
}
}
}
xiaobinsz 2018-08-14
  • 打赏
  • 举报
回复
重新写了一下,实现了

import java.util.ArrayList;
import java.util.List;

public class Main {
//对排列结果进行存贮的list
static List range_List = new ArrayList();

public static void main(String[] args) {
List list1 = new ArrayList();
list1.add("1");
list1.add("2");
list1.add("3");
list1.add("4");
List list2 = new ArrayList();
list2.add("A");
list2.add("B");
list2.add("C");
list2.add("D");
List list3 = new ArrayList();
list3.add("A");
list3.add("B");
list3.add("C");
list3.add("D");

List list = new ArrayList();
list.add(list1);
list.add(list2);
list.add(list3);

Main main = new Main();
List listlll = new ArrayList();
main.range(list, listlll);
System.out.println(range_List);
}

/**
* @param list_range 需要排列的数组
* @param list_trans 排列后的结果
*/

void range(List list_range, List list_trans) {
//获得当前要排列的list的长度
int size = list_range.size();
//循环到最后一次
if (size == 1) {
//将排列结果汇总
for (Object object : (List) list_range.get(0)) {
List l_list = new ArrayList();
l_list.addAll(list_trans);
l_list.add(object);
//将此结果汇总
range_List.add(l_list);
}
} else {
//没有循环到底
//给存排列结果的list添加排列
List loopList = (List) list_range.get(0);
List list_loop = new ArrayList();
list_loop.addAll(list_range);
list_loop.remove(0);
for (Object object : loopList) {
//将其添加到存排列结果的list中
List list_d = new ArrayList();
list_d.addAll(list_trans);
list_d.add(object);
//递归
range(list_loop, list_d);
}
}


}
}

50,549

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧