两个list 的比较删除的算法问题 现在有list1 和list2两个list,要求是list1中的数据必须是在list2中,不在list2中的数据删除得到新的list1,我不想用两个for循环,还有别的比较好的算法吗,请教各位。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 for (String str : list1){ if(!list2.contains(str)) { list2.add(str); }} List<String> list1 = new CopyOnWriteArrayList<String>(); List<String> list2 = new CopyOnWriteArrayList<String>(); list1.add("1"); list1.add("2"); list1.add("3"); list1.add("4"); list2.addAll(list1); list1.add("5"); for(String str : list1) { if(!list2.contains(str)) { list1.remove(str); } } System.err.println(java.util.Arrays.toString(list1.toArray())); } List的removeAll方法可以直接操作Collection public class ListRemove { public static void main(String[] args) { List<String> list=new ArrayList<String>(); List<String> subList=new ArrayList<String>(); list.add("0"); list.add("1"); list.add("2"); list.add("3"); subList.add("0"); subList.add("2"); list.removeAll(subList); for(String str:list){ System.out.println(str); } }} List里面的元素对应的类需要override equals and hashCode 方法。 list1中的数据不全在list2中,例如:list1.add("1")list1.add("2")list1.add("3")list1.add("4")list1.add("5")而list2中的数据是list2.add(); for (String str : list1){ if(!list2.contains(str)) { list2.add(str); }}list1中的数据不全在list2中,例如:list1.add("1")list1.add("2")list1.add("3")list1.add("4")list1.add("5")而list2中的数据是list2.add("2");list2.add("3");list2.add("6");list2.add("7");list2.add("8"); 现在我要得到的list1中数据只有2 和3 用楼上的方法貌似不行, 我用了两个for循环 比对, 这个没有达到楼主需求的,人家是要求删除List2里面不存在的元素,你这是删除list2中存在的元素。 这还不简单org.apache.commons.collections.ListUtils.subtract(java.utils.List arg1,java.utils.List arg2) 8楼的方法正解。retainAll(Collection<?> col)方法仅保留该集合中同时包含在指定集合中的对象,其他的全部移除,与removeAll()方法正好相反。返回值为boolean型,如果存在符合移除条件的对象则返回true,否则返回false。 list1中的数据不全在list2中,例如:list1.add("1")list1.add("2")list1.add("3")list1.add("4")list1.add("5")而list2中的数据是list2.add("2");list2.add("3");list2.add("6");list2.add("7");list2.add("8"); 现在我要得到的list1中数据只有2和3 而不是1、4、5是在list2中的,这个方法不行 我试了。 那你就用org.apache.commons.collections.ListUtils.intersection(java.utils.List arg1,java.utils.List arg2)呗唉 for examplelist1, list2;List tmp = new ArrayList(list1); //获取list1的一个拷贝集合tmp.removeAll(list2); //用tmp去掉所有的list2的元素,也就在list2中存在的元素会删除list1.removeAll(tmp); //再用list1去掉tmp的剩下的元素,tmp剩下的就是在list2中不存在的 不好意思 没看清楚题目那么改用retainAll方法。public class ListRemove { public static void main(String[] args) { List<String> list=new ArrayList<String>(); List<String> subList=new ArrayList<String>(); list.add("0"); list.add("1"); list.add("2"); list.add("3"); subList.add("0"); subList.add("2"); list.retainAll(subList); for(String str:list){ System.out.println(str); } }} 一个简单的计算器程序,如何实现sin,cos,tan的驱动 这个如何递归处理无限级子类 请帮我看一下这个程序好吗? 40分,关于JTable 在JPanel中的问题 求一个原创的有源码的JAVA制作的XML转换小工具(报酬具体谈) StringBuffer的capacity变化规律 多线程问题 谁用java做过组件,可以给个思路么,谢谢 编译时不出错,但运行java命令时会出“no classdeffound“,why? 菜鸟求救:怎样实现统计一个方法执行多少次 请问哪位大虾知道这个程序有什么错误,谢谢! 大侠帮忙下个问题怎么解决
{
if(!list2.contains(str)) {
list2.add(str);
}
}
List<String> list1 = new CopyOnWriteArrayList<String>();
List<String> list2 = new CopyOnWriteArrayList<String>(); list1.add("1");
list1.add("2");
list1.add("3");
list1.add("4");
list2.addAll(list1);
list1.add("5");
for(String str : list1) {
if(!list2.contains(str)) {
list1.remove(str);
}
} System.err.println(java.util.Arrays.toString(list1.toArray()));
}
public class ListRemove { public static void main(String[] args) {
List<String> list=new ArrayList<String>();
List<String> subList=new ArrayList<String>();
list.add("0");
list.add("1");
list.add("2");
list.add("3");
subList.add("0");
subList.add("2");
list.removeAll(subList);
for(String str:list){
System.out.println(str);
}
}}
list1.add("2")
list1.add("3")
list1.add("4")
list1.add("5")而list2中的数据是
list2.add();
{
if(!list2.contains(str)) {
list2.add(str);
}
}list1中的数据不全在list2中,例如:list1.add("1")
list1.add("2")
list1.add("3")
list1.add("4")
list1.add("5")而list2中的数据是
list2.add("2");
list2.add("3");
list2.add("6");
list2.add("7");
list2.add("8");
现在我要得到的list1中数据只有2 和3 用楼上的方法貌似不行, 我用了两个for循环 比对,
org.apache.commons.collections.ListUtils.subtract(java.utils.List arg1,java.utils.List arg2)
list1.add("2")
list1.add("3")
list1.add("4")
list1.add("5")而list2中的数据是
list2.add("2");
list2.add("3");
list2.add("6");
list2.add("7");
list2.add("8");
现在我要得到的list1中数据只有2和3 而不是1、4、5是在list2中的,这个方法不行 我试了。
org.apache.commons.collections.ListUtils.intersection(java.utils.List arg1,java.utils.List arg2)呗唉
list1, list2;
List tmp = new ArrayList(list1); //获取list1的一个拷贝集合
tmp.removeAll(list2); //用tmp去掉所有的list2的元素,也就在list2中存在的元素会删除
list1.removeAll(tmp); //再用list1去掉tmp的剩下的元素,tmp剩下的就是在list2中不存在的
那么改用retainAll方法。
public class ListRemove { public static void main(String[] args) {
List<String> list=new ArrayList<String>();
List<String> subList=new ArrayList<String>();
list.add("0");
list.add("1");
list.add("2");
list.add("3");
subList.add("0");
subList.add("2");
list.retainAll(subList);
for(String str:list){
System.out.println(str);
}
}}