package com.zhiyou100.homework.mergecollection;import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;/*    合并多个集合同类项       {aaa,bbb,ccc},{bbb,ddd},{eee,fff},{ggg},{ddd,hhh}通过编程实现结果为:{aaa,bbb,ccc,ddd,hhh},{eee,fff},{ggg}思路:把五个小集合存入一个大集合中,遍历大集合处理大集合合并同类项,添加到新的大集合中*/
public class MergeCollectiongTwoArrayList {public static void main(String[] args) {ArrayList<String> list1 = new ArrayList<>();list1.add("ccc");list1.add("aaa");list1.add("bbb");ArrayList<String> list2 = new ArrayList<>();list2.add("bbb");list2.add("ddd");ArrayList<String> list3 = new ArrayList<>();list3.add("eee");list3.add("fff");ArrayList<String> list4 = new ArrayList<>();list4.add("ggg");list4.add("ooo");list4.add("qqq");ArrayList<String> list5 = new ArrayList<>();list5.add("hhh");list5.add("ddd");list5.add("eee");list5.add("fff");list5.add("ooo");list5.add("uuu");list5.add("ggg");ArrayList<String> list6 = new ArrayList<>();list6.add("zzz");list6.add("xxx");ArrayList<ArrayList<String>> lists = new ArrayList<>(); // 定义一个有五个小集和的大集合Alists.add(list6);lists.add(list5);lists.add(list4);lists.add(list3);lists.add(list2);lists.add(list1); // 把第五个小集和直接放进去ArrayList<ArrayList<String>> list = new ArrayList<>(); // 定义一个接收结果的空大集合Bfor (int x = 0; x < lists.size(); x++) { // 大集合A,遍历自己里面的的小集合int n = 0; // AB俩集合第一次出现相同项时,B集合索引位置int a = 0; // AB最后一次次出现相同项时,B集合的索引位置int m = 0; // 统计AB集合在A的某个小集和在B集合整体遍历出现相同项的次数boolean isB = true; // 开关 , 控制两个集合中的元素是否至少有一次相同,有就记录为false,用于 :如果没有相同项就把A集合当前的小集和体添加到B集合的最后索引位置(合并的是在大集合B追加A的小集合)boolean isBoolean = true; // 定义开关 , 如果只要小集合里出现一次有相同的就为false,用于:如果出现相同,就把A集当前存在同类项的小集合于B集合中对比的小集合的元素合并同类项,(合并的是俩 者小集合内元素)for (int i = 0; i < list.size(); i++) { // 遍历大集合BisBoolean = true; // 定义开关 , 如果只要集合里出现一次有相同的就为falsefor (int j = 0; j < list.get(i).size(); j++) { // 大集合B里的小集合遍历元素for (int y = 0; y < lists.get(x).size(); y++) { // A集合里的小集合遍历元素// System.out.println("x"+x+"y"+y+"i"+i+"j"+j);if (lists.get(x).get(y).equals(list.get(i).get(j))) { // 比较俩小集合元素是否相等// 删除大集合A的当前小集合中与大集合B相等的元素// System.out.println("sc" + lists.get(x).get(y));lists.get(x).remove(y);y--; // 删除后,需要下标前移isBoolean = false; // 只要出现同类项,就为false,说明俩集合是有同类项的isB = false; // 只要出现一次,就为false,说明俩集合是有同类项的,那么大集合A的当前小集合不能整体添加到到集合B,只能合并同类项元素// 如果是第一次出现同类项进去if (m == 0) {// 记录第一次出现在,大集合B的那个小集合索引位置n = i;}a = i;// 最后一次出现相同项,AB最后一次次出现相同项时,B集合的索引位置m++; // 统计AB集合在A的某个小集和在B集合整体遍历出现相同项的次数if (m > 1 && a != n) { // 相同项出现多次且两次出现在大集合B位置不一样,那么进入// 把大集合B中存在相同项的在第二次小集和出现的相同的元素删除// System.out.println("相同项删除"+list.get(i).get(j));list.get(i).remove(j);// 大元素B的本小集和的元素长度减一,下标集体向前移动if (j < 0) {break;} else {j--;break;}}} else {}}}// isBoolean == false 时,说明存在于大集合B有相同项的小集合,需要合并if (isBoolean == false) { // 集合B本身被第三者连理存在三者之间有相同项需要合并if (m > 1 && a != n) { // 大集合相同项出现多次且两次出现在大集合位置不一样,那么进入(说明大集合B中存在俩个小集合有同类项,需要合并)// 合并大集合中具有相同项的两个小集和for (int l = 0; l < list.get(a).size(); l++) {// System.out.println(""+list.get(a).get(l));list.get(n).add(list.get(a).get(l));}// 把相同的小集合删除list.remove(a);// 大集合的小集和索引集体向前移动,那么就需要把索引向前移i--;} else {// 集合A与集合B存在相同项// 把大集合A的小集合的其他项添加到大集合B相对应的这项当中for (int l = 0; l < lists.get(x).size(); l++) {list.get(i).add(lists.get(x).get(l));}}}}// isBoolean == true 时,说明俩个集合没有同类项 可以吧大集合A的小集合添加到大集合B内if (isB == true) {// 直接在大集合B后面添加小集合list.add(lists.get(x));}// 处理小集合里的元素乱序 排序为 a,b,c,dfor (int i = 0; i < list.size(); i++) {Collections.sort(list.get(i));}// 处理大集合里小集合乱序 排序为 {a},{b},{c},{d}Collections.sort(list, new Comparator<ArrayList<String>>() {@Overridepublic int compare(ArrayList<String> o1, ArrayList<String> o2) {// 获取每个小集合的第一个元素的第一个字母,转化为char数组,再取出第一个char元素return (o1.get(0).substring(0, 1).toCharArray())[0] - (o2.get(0).substring(0, 1).toCharArray())[0];}});System.out.println("第" + (x + 1) + "次集合合并项结果:" + list);}}
}

合并多个集合同类项 5.{aaa,bbb,ccc},{bbb,ddd},{eee,fff},{ggg},{ddd,hhh} 通过编程实现结果为相关推荐

  1. 现有一字符串aaa[bbb[ccc,ddd[eee,fff]],ggg[hhh,iii]]要求,取出所有类似 xxx[xxx,xxx] 结构的字符串

    // 现有一字符串:// String str = "aaa[bbb[ccc,ddd[eee,fff]],ggg[hhh,iii]]";// 要求,取出所有类似 xxx[xxx,x ...

  2. delphi----Tstringlist,将有符号的数据变成数组aaa,bbb,ccc----list[0]=aaa,list[1]=bbb

    //TStringList 常用方法与属性: varList: TStringList;i: Integer; beginList := TStringList.Create;List.Add('St ...

  3. scala使用zip合并两个集合为二元组集合

    tuple只能有tuple2到tuple22 Problem 你想要合并两个有序集合成为一个键值对集合 Solution 使用zip方法合并两个集合: scala> val women = Li ...

  4. java合并两个set_Java中合并两个集合的方法

    要在JAVA中合并两个集合,代码如下所示的− 示例import java.util.stream.*; import java.util.*; import java.io.*; public cla ...

  5. 语法求救 ifneq ($(filter aaa bbb ccc, $(Var)),)

    filter 是过滤的意思,它的原型是:$(filter PATTERN-,TEXT),意义为:过滤掉字串"TEXT"中所有不符合模式"PATTERN"的单词, ...

  6. c语言数组取出特定字符串,C语言根据特定的符号分割字符串 如:字符串a,bbb,ccc-数组[a,bbb,ccc]...

    //根据符号','分割字符串,例如:字符串"a,bbb,ccc"->数组[a,bbb,ccc] author:wangchangshuai jlu char** splitF ...

  7. python字符串合并去重_015day--python集合和字符串

    一.集合 关系测试 交集: 两个都有  .intersettion() 或用 &  符号 差集: 列表a有,列表b没有  .difference() 或用 -  符号 并集: 两列表合并,去重 ...

  8. java 以某某结尾_Java中删除第一个集合中以某某开头的元素,删除第二个集合中以某某结尾的元素,并合并成一个集合...

    import java.util.ArrayList; import java.util.List; public class Test { public static void main(Strin ...

  9. java 数组合并 去重_Java集合与数组去重

    集合去重 方法一:利用集合的contains方法,创建临时集合组装数据去重 public void listTest1(){ System.out.println("方法一"); ...

最新文章

  1. 第十一届蓝桥杯校内赛题解
  2. JavsScript中比较大小总结---基于sort()方法
  3. 牛客 数素数 (20)
  4. Python 的 sys 模块常用方法
  5. linux 修改Db2主机名,修改DB2服务器的主机名
  6. Ubuntu 开发者展示在 Ubuntu 20.04 上流畅运行 Microsoft Office 应用
  7. 解决 warning C4819 问题
  8. 一头盔一电极,MIT机器人读心完毕
  9. 【PL/SQL】触发器示例:记录加薪
  10. Flutter TextField设置默认值默认值和光标位置
  11. 阿里、腾讯、华为人力资源体系
  12. 跑跑卡丁车rush服务器维护,跑跑卡丁车rush+操作技巧 跑跑卡丁车rush+基础设定
  13. c语言去除字符串中字母,C语言经典例题100例——C语言练习实例32解答(在字符串中删除指定字母或字符串)...
  14. JAVA使用HttpURLConnection请求HTTPS网站,不需要证书验证的DEMO教程
  15. C语言程序设计——结构体
  16. 四川省眉山市2021年高考成绩查询,四川眉山中学2021年排名
  17. 以太坊Dapp通过web3js部署调用智能合约
  18. 三星oneUI安装谷歌商店的方法
  19. 亲身经历3家1000人互联网公司,分享 25 条潜规则!
  20. linux终端撤销rm -r,Linux防止“rm -rf /”误操作的方法

热门文章

  1. 914-详解进程调度算法
  2. 《现代控制理论》绪论
  3. Android头像上传时裁剪图片过大问题,裁剪大图片导致
  4. Android的Elevation与TranslationZ探索
  5. 0X Swagger2
  6. Windows 2008 R2 SP1更新补丁报错解决建议
  7. 什么是Web Service?[转]
  8. 电脑突然无法上网如何解决 如何重新启用以太网
  9. vue手机号中间四位加*号
  10. 强迫症的 Mac 设置指南