A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

有两个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

请问大家有什么好的算法吗?

评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1

查看全部评分

8 个回复

倒序浏览
把一个集合的元素分别在另一个集合中案顺序查找,找到则在两个集合中删除匹配的元素。

评分

参与人数 1黑马币 +1 收起 理由
乔兵 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 匡文 于 2013-10-24 11:07 编辑

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

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

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

评分

参与人数 1技术分 +1 收起 理由
周志龙 + 1 赞一个!

查看全部评分

回复 使用道具 举报
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中,
然后对集合中的集合对象进行比较,相同的就删除,剩下的就是想要的
结果了。

评分

参与人数 1技术分 +1 收起 理由
周志龙 + 1 很给力!

查看全部评分

回复 使用道具 举报
list2.removeAll(list1); 然后再把交集的元素打印出来
回复 使用道具 举报
讲下大概思路:方法就是将list1放入list2中进行一下迭代操作,找到相同的元素并剔除之。
如是个集合就简单了,ArrayList 中就用list2.removeAll(list1),方便.
回复 使用道具 举报
小夕 初级黑马 2013-10-26 07:55:28
7#
双for循环类似冒泡算法,将第一个每个取出与第二个每个作比较,然后再将第二个每个取出与第一个每个作比较。
回复 使用道具 举报
同意板凳同学的方法,利用for循环比较list1和list2
把list2中与list1元素相同的元素从list2中移除
当前list2中的元素list2比list1多出来的元素
再利用for循环输出

评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马