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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 余善航 中级黑马   /  2013-1-9 21:53  /  1765 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 张向辉 于 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;
}
}

评分

参与人数 1技术分 +1 收起 理由
Rancho_Gump + 1 赞一个!

查看全部评分

5 个回复

倒序浏览
        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;
        }

评分

参与人数 1技术分 +1 收起 理由
Rancho_Gump + 1 赞一个!

查看全部评分

回复 使用道具 举报
重点在红色部分,
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;
}
}

评分

参与人数 1技术分 +1 收起 理由
Rancho_Gump + 1 赞一个!

查看全部评分

回复 使用道具 举报
你错的地方楼上都已经说得清楚了,if语句的判断条件有问题。
这里我帮你修改了下,用增强for循环遍历的。

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

QQ截图20130110093803.png

评分

参与人数 1技术分 +1 收起 理由
Rancho_Gump + 1 赞一个!

查看全部评分

回复 使用道具 举报
只需修改while中的语句。。原因一楼说的已经很清楚啦,一开始a1是空的新集合,你和另一个包含元素的集合比较,每次都把a集合里的元素存入啦。。
怎么解决呢。应该是a1这个集合与a中每一个元素比较如果a1集合中没有这个元素则添加!!所以if(!a1.contains(每一个元素))不相同则添加这个元素到集合中!
明白?
while(it.hasNext())
  {
          Object obj=it.next();
   if(!a1.contains(obj))
   {
    a1.add(obj);
}
回复 使用道具 举报
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呢.........
感觉要是写最好还是写规范了好
类开始字母至少要大写吧
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马