黑马程序员技术交流社区
标题:
集合中的错误找不出来
[打印本页]
作者:
ぺsimon☆
时间:
2013-4-24 22:01
标题:
集合中的错误找不出来
本帖最后由 ぺsimon☆ 于 2013-4-25 01:04 编辑
/*
去除ArrayList集中的重复元素
*/
import java.util.*;
class ArrayListTest
{
public static void main(String[] args)
{
ArrayList al=new ArrayList(); //定义一个集合al
al.add("java01");
al.add("java02");
al.add("java02");
al.add("java03");
al.add("java04");
al.add("java01");
System.out.println(al);
System.out.println(myGet(al));
}
public static ArrayList myGet(ArrayList al)
{
ArrayList newal=new ArrayList(); //定义一个新集合
Iterator it=newal.iterator(); //获取迭代器
while(it.hasNext()) //判断是否有下一个元素
{
Object obj=it.next(); //把获取到的元素的地址值赋给obj
////判断新集合里没有obj元素,如果没有就把obj添加到新集合
if(!newal.contains(obj))
newal.add(obj);
}
return newal; //返回新集合
}
}
复制代码
问题;
为什么我在dos命令行里的输出结果是空呢?
运行结果
[java01, java02, java02, java03, java04, java01]
[]
作者:
wangyougu010
时间:
2013-4-24 22:11
/*
去除ArrayList集中的重复元素
*/
import java.util.*;
class ArrayListTest
{
public static void main(String[] args)
{
ArrayList al=new ArrayList(); //定义一个集合al
al.add("java01");
al.add("java02");
al.add("java02");
al.add("java03");
al.add("java04");
al.add("java01");
System.out.println(al);
System.out.println(myGet(al));
}
public static ArrayList myGet(ArrayList al) {
ArrayList newal = new ArrayList(); // 定义一个新集合
Iterator it=al.iterator(); //获取迭代器 标注:这个地方是获取原有集合a1的迭代器,而不是新集合newa1
while(it.hasNext()) //判断是否有下一个元素
{
Object obj=it.next(); //把获取到的元素的地址值赋给obj
////判断新集合里没有obj元素,如果没有就把obj添加到新集合
if(!newal.contains(obj))
newal.add(obj);
}
return newal; //返回新集合
}
}
问题在上面 标注 处,迭代器获取错了,应该是原有集合的.
作者:
403383221
时间:
2013-4-24 22:16
本帖最后由 403383221 于 2013-4-24 22:28 编辑
应该是获取原集合的迭代器啊
Iterator it=al.iterator();
ArrayList newal=new ArrayList(); //定义一个新集合
Iterator it=newal.iterator(); //获取迭代器(这里错了,应迭代原集合)
while(it.hasNext()) //判断是否有下一个元素
复制代码
作者:
刘学明
时间:
2013-4-24 22:22
/*
去除ArrayList集中的重复元素
*/
import java.util.*;
class ArrayListTest
{
public static void main(String[] args)
{
ArrayList al=new ArrayList(); //定义一个集合al
al.add("java01");
al.add("java02");
al.add("java02");
al.add("java03");
al.add("java04");
al.add("java01");
System.out.println(al);
System.out.println(myGet(al));
}
public static ArrayList myGet(ArrayList al)
{
ArrayList newal=new ArrayList(); //定义一个新集合
Iterator it=newal.iterator(); //获取迭代器 !!!!这个地方错了
while(it.hasNext()) //判断是否有下一个元素
{
Object obj=it.next(); //把获取到的元素的地址值赋给obj
////判断新集合里没有obj元素,如果没有就把obj添加到新集合
if(!newal.contains(obj))
newal.add(obj);
}
return newal; //返回新集合
}
}
复制代码
代码中 Iterator it=newal.iterator(); //这句话是错的 获取迭代器应该是获取al的迭代器 因为 newal中还没有内容 如果获取newal的迭代器 则不会执行 while(it.hasNext())循环 后面的语句都没执行 所以没有输出 应该改成获取al的迭代器 Iterator it = al.iterator():
作者:
朱德帅
时间:
2013-4-24 22:39
大哥,你获取的迭代器是你在方法方法中新定义的集合的,当然是空的啊!
public static ArrayList myGet(ArrayList al)
{
ArrayList newal=new ArrayList(); //定义一个新集合
//这里你是获取上面新定义的集合的迭代器,应该是al.iterator();
Iterator it=newal.iterator(); //获取迭代器
while(it.hasNext()) //判断是否有下一个元素
{
Object obj=it.next(); //把获取到的元素的地址值赋给obj
////判断新集合里没有obj元素,如果没有就把obj添加到新集合
if(!newal.contains(obj))
newal.add(obj);
}
return newal; //返回新集合
}
复制代码
作者:
yinbolove576
时间:
2013-4-24 22:46
/*
去除ArrayList集中的重复元素
*/
import java.util.*;
class ArrayListTest
{
public static void main(String[] args)
{
ArrayList al=new ArrayList(); //定义一个集合al
al.add("java01");
al.add("java02");
al.add("java02");
al.add("java03");
al.add("java04");
al.add("java01");
System.out.println(al);
System.out.println(myGet(al));
}
public static ArrayList myGet(ArrayList al)
{
ArrayList newal=new ArrayList(); //定义一个新集合
Iterator it=al.iterator(); //获取迭代器
是引用对象al,而不是新创建的newal对象,否则怎么将源数据传递过来呢
while(it.hasNext()) //判断是否有下一个元素
{
Object obj=it.next(); //把获取到的元素的地址值赋给obj
////判断新集合里没有obj元素,如果没有就把obj添加到新集合
if(!newal.contains(obj))
newal.add(obj);
}
return newal; //返回新集合
}
}
////由于定义的是一个新集合,因此这里在创建的一个迭代器里,只能将原集合中的对象al引用过来,来获取遍历的元素,否则无法获取原集合
作者:
ぺsimon☆
时间:
2013-4-25 01:04
明白了谢谢大家,呵呵,真是粗心啊
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2