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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 新手ing 中级黑马   /  2015-7-11 12:04  /  766 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

                写了两种list集合去重方式,分析一下哪种比较好
                  ArrayList<String> l1 = new ArrayList<String>();
                 l1.add("PHP1");
                 l1.add("PHP2");
                 l1.add("PHP3");
                 l1.add("PHP4");
                 l1.add("PHP1");
                 l1.add("PHP2");
                 l1.add("PHP3");
                 l1.add("PHP2");
                 l1.add("PHP2");
                 for(int i = 0;i<l1.size();i++){
                         for(int j =i+1;j<l1.size();j++){
                                if(l1.get(i).equals(l1.get(j))){
                                        l1.remove(j);
                                        j--;
                                }
                         }
                 }
/*                 ArrayList<String> l2 = new ArrayList<String>();
                 Iterator it  = l1.iterator();
                 while(it.hasNext()){
                         String strValue = it.next().toString();
                         if(!l2.contains(strValue)){
                                 l2.add(strValue);
                         }
                 }*/

9 个回复

倒序浏览
欢迎补充list去重方式,分析性能
回复 使用道具 举报
最简单的方法没有之一

public class ArrayListTest2 {
        public static void main(String[] args) {
                ArrayList<String>  alist=new ArrayList<String>();
                alist.add("abc");
                alist.add("hello");
                alist.add("world");
                alist.add("abc");
                alist.add("abc");
                alist.add("abc");
                alist.add("java");
               
                ArrayList<String>  blist=new ArrayList<String>();
                blist.add("abc");
               
                alist.removeAll(blist);
                System.out.println(alist);
               
        }
}
回复 使用道具 举报
遍历的时候存进Set里面  再遍历Set存到集合。
回复 使用道具 举报
肯定第二种好,第一种有嵌套循环结构。不过第二种可以使用for循环把迭代器定义在里面
回复 使用道具 举报
都非常不错,赞一个
回复 使用道具 举报
黑色礼服 发表于 2015-7-11 13:09
肯定第二种好,第一种有嵌套循环结构。不过第二种可以使用for循环把迭代器定义在里面 ...

第二种重新开辟空间,以空间换时间,数据量大就不行。
回复 使用道具 举报
可以直接删除如二楼
回复 使用道具 举报
游呤人 发表于 2015-7-11 13:18
可以直接删除如二楼

得把相同的数据遍历出来,这效率低啊
回复 使用道具 举报
新手ing 发表于 2015-7-11 13:18
第二种重新开辟空间,以空间换时间,数据量大就不行。

我感觉还是要求代码简洁,有时候原有的集合保留还是有好处的。
另外第一个的比较次数会比较多啊,运行时间会比较长啊,两个各有优缺点,这个这能看开发需求,没法定义那个更好。不过个人感觉开发多用的是第二种  。
仅供参考   
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马