List<Object> a = new ArrayList<Object>(); List<Object> b = new ArrayList<Object>(); a.add("111"); a.add("222"); b.add("222"); b.add("333"); a.removeAll(b); a.addAll(b); System.out.println(a.size());
如果数据量较大,考虑到效率问题可采用下面的方法
List<Object> a = new ArrayList<Object>(); List<Object> b = new ArrayList<Object>(); a.add("111"); a.add("222"); b.add("222"); b.add("333"); Set<Object> set = new HashSet<Object>(); set.addAll(a); set.addAll(b); List<Object> c = new ArrayList<Object>(set); System.out.println(c.size());
如果需要保持列表顺序可以使用LinkedHashSet
list中如果是String的话上述方法没问题,如果是对象的话应该重写对象的equals方法,而且对象中要有唯一的标识,比如id,也可以是其他,标识相同则认为两个对象是相同的,示例如下:
User类:
public class User { private String id; private String name; private String age; public String getId() { return id; } public void setId(String id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getAge() { return age; } public void setAge(String age) { this.age = age; } @Override public boolean equals(Object obj) { return obj instanceof User&& this.id != null && this.id.equals(((User)obj).getId()); } }
测试类:
import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.Set; public class TestList { public static void main(String[] args) { List<Object> a = new ArrayList<Object>(); List<Object> b = new ArrayList<Object>(); for(int i=0;i<2;i++){ User user = new User(); user.setId(i+""); a.add(user); } for(int i=1;i<3;i++){ User user = new User(); user.setId(i+""); b.add(user); } a.removeAll(b); a.addAll(b); System.out.println(a.size()); Set<Object> set = new HashSet<Object>(); set.addAll(a); set.addAll(b); List<Object> c = new ArrayList<Object>(set); System.out.println(c.size()); } }