将B集合合并到A集合
List<String> listA = new ArrayList<String>();
List<String> listB = new ArrayList<String>(); listA.add("A");
listA.add("A001");
listA.add("A001001"); listB.add("A001");
listB.add("A001001");
listB.add("A001001001"); 如果B集合中有元素同A集合中某元素相同 再在后面加001,然后再在A,B集合查看是否相同,相同加001 ,直到不相同。

解决方案 »

  1.   

    那么listB中是否允许重复的呢?
    如果允许的话那么就:public static void main(String[] args) {
    List<String> listA = new ArrayList<String>();
    List<String> listB = new ArrayList<String>(); listA.add("A");
    listA.add("A001");
    listA.add("A001001"); listB.add("A001");
    listB.add("A001001");
    listB.add("A001001001");
    test(listA, listB);
    for(String b:listB){
    System.out.println(b);
    }
    } public static void test(List<String> listA,List<String> listB){
    for(String b:listB){
    if(listA.contains(b)){
    listB.remove(b);
    b+="001";
    listB.add(b);
    test(listA, listB);break;
    }
    }

    }
    不允许的话引用一下我再改改结束条件应该就行了
      

  2.   

    稍微看了下一楼的答案,基本已经完整了。
    楼主补充listB不能重复的条件,只要在22和23之间加个判断b是否存在listB,是+001,否继续。
    这样应该就可以了。
      

  3.   

    在上面的那个基础上再加一下这个方法就行了
    这方法处理一下listB就行了。public static void test2(List<String> listB){
    for(int i=0;i<listB.size();i++){
    String b=listB.get(i);
    listB.remove(i);
    if(listB.contains(b)){
    b+="001";
    listB.add(b);
    test2(listB);break;
    }else{
    listB.add(b);
    }

    }

    }
      

  4.   


        public static void main(String[] args)
        {
            List<String> listA = new ArrayList<String>();
            List<String> listB = new ArrayList<String>();        listA.add("A");
            listA.add("A001");
            listA.add("A001001");        listB.add("A001");
            listB.add("A001001");
            listB.add("A001001001");        //最终保证listB中的字符串全部在listA中不存在
            while (isContain(listA, listB))
            {
                for (String str : listB)
                {
                    //存在相同,则+001处理
                    if (listA.contains(str))
                    {
                        //处理之前要保证+001在B中不重复
                        process(str, listB);
                    }
                }
            }
            
            listA.addAll(listB);
            System.out.println(listA);
        }    private static void process(String str, List<String> listB)
        {
            //获取下标
            int index = listB.indexOf(str);        //下标小于0,则退出
            if (index < 0)
            {
                return;
            }        //拼装后的新字符串
            String newStr = str + "001";        //如果依然存在,需要递归调用
            if (listB.contains(newStr))
            {
                process(newStr, listB);
            }
            else
            {
                //不重复,则加入到list中
                listB.set(index, newStr);
            }
        }    //判断是否在listA中存在
        private static boolean isContain(List<String> listA, List<String> listB)
        {
            for (String str : listB)
            {
                if (listA.contains(str))
                {
                    return true;
                }
            }
            return false;
        }
      

  5.   

    public static void main(String[] args) {
    List<String> listA = new ArrayList<String>();
    List<String> listB = new ArrayList<String>(); listA.add("A");
    listA.add("A001");
    listA.add("A001001"); listB.add("A001");
    listB.add("A001001");
    listB.add("A001001001");

    addList(listA,listB);
    System.out.println(listA);
    } private static void addList(List<String> listA, List<String> listB) {
    for (int i = 0; i < listB.size(); i++) {
    String str = listB.get(i);
    String newStr = testSame(str,listA,listB);
    listA.add(newStr);
    }
    } private static String testSame(String str, List<String> listA,
    List<String> listB) {
    while(listA.contains(str) || listB.contains(str)){
    str = str+"001";
    }
    return str;
    }