黑马程序员技术交流社区

标题: ArrayList去除重复元素的问题 [打印本页]

作者: 清心玉质    时间: 2013-7-19 20:35
标题: ArrayList去除重复元素的问题
本帖最后由 清心玉质 于 2013-7-19 21:55 编辑

学习的时候顺手敲下了下面代码,功能时实现去除ArrayList重复元素,可是却没有实现。我检查好几遍也没检查出来,望各位帮忙看看。

import java.util.*;
class  ArrayListDemo
{
        public static void sop(Object obj)
        {
                System.out.println(obj);
        }
        
        public static void main(String[] args)
        {
                ArrayList al = new ArrayList();
                al.add("java01");
                al.add("java03");
                al.add("java02");
                al.add("java03");
                al.add("java02");
                al.add("java01");
                        
                sop(al);
                al = singleElement(al);
                sop(al);
        }

        public static ArrayList singleElement(ArrayList al)
                {
                        //定义一个临时容器
                        ArrayList nl = new ArrayList();
                        Iterator it = al.iterator();
                        
                        while (it.hasNext())
                        {
                                Object obj = it.next();
                                if(!nl.contains(obj));
                                nl.add(obj);
                        }

                        return nl;
                }
}

作者: Rainbow    时间: 2013-7-19 21:00
  1. package com.itheima;

  2. import java.util.*;

  3. public class ArrayListDemo {
  4.         public static void sop(Object obj) {
  5.                 System.out.println(obj);
  6.         }

  7.         public static void main(String[] args) {
  8.                 ArrayList al = new ArrayList();
  9.                 al.add("java01");
  10.                 al.add("java03");
  11.                 al.add("java02");
  12.                 al.add("java03");
  13.                 al.add("java02");
  14.                 al.add("java01");

  15.                 sop(al);
  16.                
  17.                 sop(singleElement(al));
  18.         }

  19.         public static ArrayList singleElement(ArrayList al) {
  20.                 // 定义一个临时容器
  21.                 ArrayList nl = new ArrayList();
  22.                 Iterator it = al.iterator();

  23.                 while (it.hasNext()) {
  24.                         Object obj = it.next();
  25.                         if (!nl.contains(obj)){
  26.                                 nl.add(obj);
  27.                         }
  28.                                
  29.                        
  30.                 }

  31.                 return nl;
  32.         }
  33. }
复制代码

作者: 月亮人生    时间: 2013-7-19 21:01
  1. import java.util.*;
  2. class  ArrayListDemo
  3. {
  4.         public static void sop(Object obj)
  5.         {
  6.                 System.out.println(obj);
  7.         }
  8.       
  9.         public static void main(String[] args)
  10.         {
  11.                 ArrayList al = new ArrayList();
  12.                 al.add("java01");
  13.                 al.add("java03");
  14.                 al.add("java02");
  15.                 al.add("java03");
  16.                 al.add("java02");
  17.                 al.add("java01");
  18.                        
  19.                 sop(al);
  20.                 al = singleElement(al);
  21.                 sop(al);
  22.         }

  23.         public static ArrayList singleElement(ArrayList al)
  24.                 {
  25.                         //定义一个临时容器
  26.                         ArrayList nl = new ArrayList();
  27.                         Iterator it = al.iterator();
  28.                        
  29.                         while (it.hasNext())
  30.                         {
  31.                                 Object obj = it.next();
  32.                                 if(!nl.contains(obj))
  33.                                 nl.add(obj);
  34.                         }

  35.                         return nl;
  36.                 }
  37. }
  38. 在if语句后面多了一个分号,下面的语句没在if语句中。。。
复制代码

作者: 清心玉质    时间: 2013-7-19 21:55
非常感谢!!
作者: 深圳在漂移    时间: 2013-7-20 11:26
方法一:循环元素删除 (使用的方式FOR循环操作。不建议使用大数据量的转换。。n*n的循环量)
//  删除ArrayList中重复元素
public   static   void  removeDuplicate(List list)   {
   for  ( int  i  =   0 ; i  <  list.size()  -   1 ; i ++ )   {
    for  ( int  j  =  list.size()  -   1 ; j  >  i; j -- )   {
      if  (list.get(j).equals(list.get(i)))   {
        list.remove(j);
      }
    }
  }
  System.out.println(list);
}
方法二:通过HashSet剔除 (本人喜欢使用的方式:使用的是hash数组不能产生重复数据的特性,来转换LIST)//  删除ArrayList中重复元素
    HashSet hSet  =   new  HashSet(list);
    list.clear();
    list.addAll(hSet);
    System.out.println(list);

方法三: 删除ArrayList中重复元素,保持顺序  // 删除ArrayList中重复元素,保持顺序
public   static   void  removeDuplicateWithOrder(List list)   {
      Set set  =   new  HashSet();
      List newList  =   new  ArrayList();
   for  (Iterator iter  =  list.iterator(); iter.hasNext();)   {
         Object element  =  iter.next();
         if  (set.add(element))
            newList.add(element);
     }
     list.clear();
     list.addAll(newList);
     System.out.println( " remove duplicate "   +  list);
}

作者: yangqing    时间: 2013-7-20 13:15
      while (it.hasNext())
                        {
                                Object obj = it.next();
                                if(!nl.contains(obj));
                                nl.add(obj);
                        }
上面的 if 没有限定范围 。。 。




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