public static void main(String args[]){。
/**
* 大体思路:
* 1.把list2添加到list1中;添加时,先循环list2,用list2中的每个值,分别和。
* list1去比较,如果重复,跳出循环,则不添加,如果不重复,则list2的值添加到list1中。
*/
List<Integer> list2=new ArrayList<Integer>(); 。
list2.add(1); 。
list2.add(2); 。
list2.add(4); 。
List<Integer> list1=new ArrayList<Integer>(); 。
list1.add(1); 。
list1.add(2); 。
list1.add(5); 。
temp = 0;//重复标识 0-该值在list1中唯一;1-该值在list1中有重复值。
for(int i=0 ;i < list2.size();i++){。
for(int j=0; j< list1.size(); j++){。
if (list2.get(i) == list1.get(j)){。
temp = 1;。
}
}
if(temp = 0){。
list1.add(list2.get(i));。
}
}
System.out.println(list1.size());。
后记:list1本身也需要去重,方法一样,自己去一下吧。
示例代码:
public static void main(String[] args){。
List<Integer> list1 = new ArrayList<Integer>();。
list1.add(1);。
list1.add(2);。
list1.add(3);。
list1.add(4);。
List<Integer> list2 = new ArrayList<Integer>();。
list2.add(1);。
list2.add(4);。
list2.add(7);。
list2.add(10);。
List<Integer> listAll = new ArrayList<Integer>();。
listAll.addAll(list1);。
listAll.addAll(list2);。
listAll = new ArrayList<Integer>(new LinkedHashSet<>(listAll));。
System.out.println(listAll);。
}
输出:
[1, 2, 3, 4, 7, 10]。
代码要典:
合并 使用java.util.List.addAll(Collection<? extends Integer>)。
去重,借助LinkedHashSet 。
import java.util.ArrayList;。
import java.util.Arrays;。
import java.util.Iterator;。
import java.util.List;。
import java.util.TreeSet;。
public class MyCode {。
static TreeSet<String> ts = new TreeSet<>();。
static StringBuffer stb = new StringBuffer();。
public static void main(String args[]) {。
List<Integer> a = new ArrayList<>();。
a.add(1);
a.add(2);
a.add(3);
List<Integer> b = new ArrayList<>();。
b.add(2);
b.add(3);
b.add(4);
b.add(5);
List<Integer> c = new ArrayList<>();。
c.add(5);
c.add(6);
List<Integer> d = new ArrayList<>();。
d.add(5);
List<Integer> e = new ArrayList<>();。
e.add(7);
String arr[];。
List<String> names = (Arrays.asList("a,b,c,d,e".split(",")));。
ArrayList<List<Integer>> list = new ArrayList<>();。
list.add(a);
list.add(b);
list.add(c);
list.add(d);
list.add(e);
for (int i = 0; i < list.size(); i++) {。
List<Integer> temA = new ArrayList<>(list.get(i));。
for (int j = i + 1; j < list.size(); j++) {。
List<Integer> temB = new ArrayList<>(list.get(j));。
temA.retainAll(temB);。
if (temA.size() <= 0) {。
List<Integer> temC = new ArrayList<>(list.get(i));。
List<Integer> temD = new ArrayList<>(list.get(j));。
temC.addAll(temD);。
stb.append(names.get(i) + "," + names.get(j) + ",");。
getNameIndex(temC, list, i, j, names);。
arr = stb.toString().split(",");。
Arrays.sort(arr);。
ts.add(Arrays.toString(arr));。
stb.delete(0, stb.length());。
}
}
}
for (Iterator<String> it = ts.iterator(); it.hasNext();) {。
System.out.println(it.next());。
}
}
private static void getNameIndex(List<Integer> listTem, List<List<Integer>> listB, int x, int y,。
List<String> names) {。
for (int i = 0; i < listB.size(); i++) {。
if (i == x || i == y) {。
continue;
}
List<Integer> listN = new ArrayList<>(listTem);。
List<Integer> listM = new ArrayList<>(listB.get(i));。
listN.retainAll(listM);。
if (listN.size() <= 0) {。
stb.append(names.get(i));。
break;
}
}
}
你这个,麻雀虽小,五脏俱全呢,看似一个简单的小玩意,挺费劲的!。
主要用的是交集,并集,难点就是因为嵌套,有点饶头..你自己琢磨一下吧!。
新定义一个类,这个类包含两个已有类成员以及共有的Id。然后,遍历原有List集合查找Id匹配对象。找到后,生成新定义类的实例并放入合并List集合。 举例如下(C#): // 原有类1public class Class1{ public int Id { get; set; } //其余代码略……...。
import java.util.*;。
public class Test {。
public static void main(String[] args){ 。
List <Integer> l1=new ArrayList<Integer>();。
l1.add(1);l1.add(2);l1.add(3);。
l1.add(4);l1.add(5);l1.add(6);。
List <Integer> l2=new ArrayList<Integer>();。
l2.add(4);l2.add(5);l2.add(6);。
l2.add(7);l2.add(8);l2.add(9);。
Set<Integer> s=new TreeSet(l1);。
for(Integer i:l2){。
//当添加不成功的时候 说明s中已经存在该对象,直接remove掉该对象即可。
if(!s.add(i)) s.remove(i);。
}
System.out.println(s);。
//还可以用下面一种方法
List <Integer> temp=new ArrayList<Integer>(l1);//用来保存两者共同有的数据。
temp.retainAll(l2);。
l1.removeAll(temp);//l1中去掉两者共同有的数据。
l2.removeAll(temp);//l2中去掉两者共同有的数据。
List <Integer> l3=new ArrayList<Integer>();。
l3.addAll(l1);。
l3.addAll(l2);。
System.out.println(l3);。
}