给你我的思路吧,我大概有三种方案,但三种方案的前提是数字不重复,我想这点是必须的
一、做最简单的遍历,也就是应用二重循环对a遍历,并在a遍历方法内遍历b然后逐条比较如果没有就加入一个,不过因为是数据不能随便添加最终你还是要重新new一个数组
这种做法的坏处就是两次循环相当于笛卡尔积,遍历内容过多,如果数据太大就不建议这种方案了
二、由于你用java来遍历,所以可以把b中的数据放入一个List集合里面,遍历a应用list的contain方法,如果存在就不加入,如果不存在就加入到list里面,最后再把list转换为数字
这种做法可能应用到其他类,所以在算法上不受自己控制
三、自己写一个算法,我的思路是首先对b数组排序,然后遍历a数组,并在a数组中通过折半查找b中是否存在a的元素,如果不存在就添加
以上不知道能否满足你。
按你的要求, 最后b中的元素肯定和a中的元素相同, 但是你又不允许直接把a中的元素赋给b中
下面的代码可以实现, 你自己看吧, 有注释
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class Test {
/**
* @param args
*/
private ListasList(int[] i) {
Listlist = new ArrayList ();
for (int t : i) {
list.add(t);
}
return list;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
Test t = new Test();
int[] a = { 1, 2, 3, 4};
int[] b = { 3, 4, 5 };
ListlistA = t.asList(a);
ListlistB = t.asList(b);
for (int i : listA) {//遍历a, 对于a中每个元素
if(!listB.contains(i)){//如果b中没有, 添加到b中
listB.add(i);
}
}
for(Iteratorit = listB.iterator(); it.hasNext();){//遍历b中的每个元素
int i = it.next();
if(!listA.contains(i)){//如果a中没有, 从b中删除
it.remove();
}
}
System.out.println("a : " + listA);
System.out.println("b : " + listB);
}
}
就是将a中的元素赋值给b数组,只不过多了判断比较而已