黑马程序员技术交流社区

标题: 集合问题 [打印本页]

作者: 余善航    时间: 2013-1-9 21:53
标题: 集合问题
本帖最后由 张向辉 于 2013-1-16 12:18 编辑

//需求:将一个集合中的元素取出存入另一个集合中并且消除重复项。

//问题:为什么我的程序运行出来的结果总是还有重复项:[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;
}
}

作者: 张云杰    时间: 2013-1-9 22:18
        public static List method(ArrayList a) {
                ArrayList a1 = new ArrayList();//这里new 的话 初始化 为空..
                Iterator it = a.iterator();
                while (it.hasNext()) {
                        if (!a1.contains(a)) { //空的话 这里进行判断,  成立
                                a1.add(it.next());  // 第一次执行的话 应该是 [jj, null, null, null, null, null, null, null, null, null]
                                                                        // 一直到 你的a1的值 变成 [jj, kk, jj, ll, oo, jj, kk, jj]
                                                                        // 这时候  已经包含了 与上面的List 的值一样了.. 所以答案是这个
                                                                        // 因为你是把整个 a1 这个List拿来包含了.. 如果是取a1的下标 那就不一样了..

                        }
                }
                return a1;
        }
作者: 黄锦成    时间: 2013-1-9 22:47
重点在红色部分,
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())
  {
   String s = (String)it.next();
   if(!a1.contains(s))
   {
    a1.add(s);
   }

  }
  return a1;
}
}

作者: 黑马吕世成    时间: 2013-1-10 09:40
你错的地方楼上都已经说得清楚了,if语句的判断条件有问题。
这里我帮你修改了下,用增强for循环遍历的。

QQ截图20130110093803.png (6.92 KB, 下载次数: 142)

QQ截图20130110093803.png

作者: 肖亚光    时间: 2013-1-10 13:08
import java.util.*;
public class Stu
{
public static void main(String[] args) throws Exception
{
  ArrayList<String> list = new ArrayList<String>();
  list.add("jj");
  list.add("kk");
  list.add("jj");
  list.add("ll");
  list.add("oo");
  list.add("jj");
  list.add("kk");
  list.add("jj");
  
  
  sop(method(list));
}
public static void sop(Object obj)
{
  System.out.println(obj);
}
public static Set method(ArrayList list)
{
  Set<String> set = new HashSet<String>();
  for(Object obj : list)
        set.add(obj.toString());
  return set;
}
}


既然要去重 为什么不用Set呢.........
感觉要是写最好还是写规范了好
类开始字母至少要大写吧





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