一道集合练习题 大家来练习
将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 ,直到不相同。
[解决办法]
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;
}