黑马程序员技术交流社区

标题: list去重 [打印本页]

作者: 新手ing    时间: 2015-7-11 12:04
标题: list去重
                写了两种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);
                         }
                 }*/
作者: 新手ing    时间: 2015-7-11 12:05
欢迎补充list去重方式,分析性能
作者: 杜弦东.    时间: 2015-7-11 12:27
最简单的方法没有之一

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);
               
        }
}
作者: 冷雨敲窗被未温    时间: 2015-7-11 12:35
遍历的时候存进Set里面  再遍历Set存到集合。
作者: 黑色礼服    时间: 2015-7-11 13:09
肯定第二种好,第一种有嵌套循环结构。不过第二种可以使用for循环把迭代器定义在里面
作者: 拾起落叶    时间: 2015-7-11 13:15
都非常不错,赞一个
作者: 新手ing    时间: 2015-7-11 13:18
黑色礼服 发表于 2015-7-11 13:09
肯定第二种好,第一种有嵌套循环结构。不过第二种可以使用for循环把迭代器定义在里面 ...

第二种重新开辟空间,以空间换时间,数据量大就不行。
作者: 游呤人    时间: 2015-7-11 13:18
可以直接删除如二楼
作者: 新手ing    时间: 2015-7-11 13:23
游呤人 发表于 2015-7-11 13:18
可以直接删除如二楼

得把相同的数据遍历出来,这效率低啊
作者: 黑色礼服    时间: 2015-7-18 10:02
新手ing 发表于 2015-7-11 13:18
第二种重新开辟空间,以空间换时间,数据量大就不行。

我感觉还是要求代码简洁,有时候原有的集合保留还是有好处的。
另外第一个的比较次数会比较多啊,运行时间会比较长啊,两个各有优缺点,这个这能看开发需求,没法定义那个更好。不过个人感觉开发多用的是第二种  。
仅供参考   




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