黑马程序员技术交流社区

标题: 请教一个不算复杂的算法:把list2比list1多的元素查找出来? [打印本页]

作者: 雷丹    时间: 2013-10-24 10:48
标题: 请教一个不算复杂的算法:把list2比list1多的元素查找出来?
有两个List<String> list1和list2,List的每个元素由字母和汉字组成。list1有的元素,list2一定有;list2有的元素,list1不一定有。(相当于list2是在list1的基础上,多了几个元素)。现在想把list2比list1多的这些元素查找出来。

示例:list1={a1,b1,b2,c1},list2={a1,a2,b1,b2,c1,c2}。结果应为:a2,c2

请问大家有什么好的算法吗?
作者: 王松松    时间: 2013-10-24 11:00
把一个集合的元素分别在另一个集合中案顺序查找,找到则在两个集合中删除匹配的元素。
作者: 匡文    时间: 2013-10-24 11:04
本帖最后由 匡文 于 2013-10-24 11:07 编辑

一定要算法吗?可以直接用API里的方法呀
用removeAll方法就可以一步到位呀。removeAll()方法的用途是:移除此 collection 中那些也包含在指定 collection 中的所有元素,也就是删除两个集合中的交集。这个函数是符合你的需求描述的.因为你也没说你具体是那种list,这里我就用他们的接口的Collection的方法跟你说,也一样啦。

具体用法是list2.removeAll(list1);

建议楼主,学习Java要有更多面向对象的思维,我们是入门级别,不要过多的去钻研面向过程呀。。。

作者: 1961993790    时间: 2013-10-24 11:25
public class Test {
        public static void main(String[] args){
                        List<String> list1=new ArrayList<String>();
                        list1.add("a1");
                        list1.add("b1");
                        list1.add("b2");
                        list1.add("c1");
                        List<String> list2=new ArrayList<String>();
                        list2.add("a1");
                        list2.add("a2");
                        list2.add("b1");
                        list2.add("b2");
                        list2.add("c1");
                        list2.add("c2");
                        for (int i = 0; i < list2.size(); i++) {
                                for(int j = 0; j < list1.size(); j++){//list2中与list1中集合中元素相同的进行删除
                                        if(list2.get(i).equals(list1.get(j))){
                                                list2.remove(i);
                                        }
                                }
                               
                        }
                        //对list2中删除相同元素后的元素进行输出
                        for (int i = 0; i < list2.size(); i++) {
                                System.out.println(list2.get(i));
                        }
                }

}
实现原理:先把所有的字符串对象分别添加到两个集合list1,和list2中,
然后对集合中的集合对象进行比较,相同的就删除,剩下的就是想要的
结果了。
作者: 枫儿    时间: 2013-10-25 09:45
list2.removeAll(list1); 然后再把交集的元素打印出来
作者: hurryup    时间: 2013-10-25 13:23
讲下大概思路:方法就是将list1放入list2中进行一下迭代操作,找到相同的元素并剔除之。
如是个集合就简单了,ArrayList 中就用list2.removeAll(list1),方便.
作者: 小夕    时间: 2013-10-26 07:55
双for循环类似冒泡算法,将第一个每个取出与第二个每个作比较,然后再将第二个每个取出与第一个每个作比较。
作者: 李文帅    时间: 2013-10-26 08:51
同意板凳同学的方法,利用for循环比较list1和list2
把list2中与list1元素相同的元素从list2中移除
当前list2中的元素list2比list1多出来的元素
再利用for循环输出




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2