黑马程序员技术交流社区

标题: java集合中的一个小问题。。。 [打印本页]

作者: 黑马任雪刚    时间: 2012-5-24 16:58
标题: java集合中的一个小问题。。。
//需求:将一个集合中的元素取出存入另一个集合中并且消除重复项。

//问题:为什么我的程序运行出来的结果总是还有重复项:[jj, kk, jj, ll, oo, jj, kk, jj]。
import java.util.*;
public class stu
{
public static void main(String[] args)
{
  ArrayList a = new ArrayList();
  a.add("jj");
  a.add("kk");
  a.add("jj");
  a.add("ll");
  a.add("oo");
  a.add("jj");
  a.add("kk");
  a.add("jj");
  
  
  sop(method(a));
}
public static void sop(Object obj)
{
  System.out.println(obj);
}
public static List method(ArrayList a)
{
  ArrayList a1 = new ArrayList();
  Iterator it = a.iterator();
  while(it.hasNext())
  {
   if(!a1.contains(a))
   {
    a1.add(it.next());
      }
  }
  return a1;
}
}


作者: 云惟桉    时间: 2012-5-24 17:06
楼主要仔细学习啊,这个问题和ArrayList的概念有关。
先补一补基本概念吧,不然使用起来问题会很严重的
作者: 小小企鹅    时间: 2012-5-24 17:25
可以用set来消除重复项
public Set method(List list){
                Set set = new TreeSet();
                set.addAll(list);
                System.out.println(set);
                return set;
        }
作者: 田林    时间: 2012-5-24 18:37
楼主迭代的时候出了点错误!
Iterator it = a.iterator();
  while(it.hasNext())
  {
   if(!a1.contains(a))          // a1集合不可能包含a集合,所以每次都会执行添加动作。最后a1中的内容也就与a集合相同了。
   {
    a1.add(it.next());
      }
  }
  return a1;

修改代码:
Iterator it = a.iterator();
while (it.hasNext()) {
        String str=(String)it.next();       //获取每一次的迭代的元素,判断它是否在集合a1中。
        if(!a1.contains(str)){
                a1.add(str);
        }
}
               
        return a1;

作者: 黑马张健    时间: 2012-5-24 18:40
import java.util.*;
public class Test2 {
        public static void main(String[] args) {
                ArrayList a = new ArrayList();
                   a.add("jj");
                   a.add("kk");
                   a.add("jj");
                   a.add("ll");
                   a.add("oo");
                   a.add("jj");
                   a.add("kk");
                   a.add("jj");
                   sop(a);
                   ArrayList list = new ArrayList();
                   HashSet hashsetObject=new HashSet(a);
                   Iterator iteratorObject=hashsetObject.iterator();
               while(iteratorObject.hasNext()){
                   String str=(String)iteratorObject.next();
                   list.add(str);
               }
               sop(list);
        }
        public static void sop(Object obj)
        {
          System.out.println(obj);
        }
}
打印结果:
[jj, kk, jj, ll, oo, jj, kk, jj]
[jj, kk, oo, ll]
作者: niceBoy    时间: 2012-5-24 18:45
楼上OK的了,或者直接用set集合存吧




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