黑马程序员技术交流社区
标题:
去除ArrayList中的重复元素程序错误
[打印本页]
作者:
左建飞
时间:
2012-8-7 13:15
标题:
去除ArrayList中的重复元素程序错误
import java.util.ArrayList;
import java.util.Iterator;
public class SingleElement
{
/**
* 去除ArrayList中的重复元素
*/
public static void main(String[] args)
{
ArrayList<String> al=new ArrayList<String>();
al.add("java01");
al.add("java01");
al.add("java02");
al.add("java03");
ArrayList<String> newal=singleElement(al);
System.out.println(newal);
}
public static ArrayList<String> singleElement(ArrayList<String> al)
{
ArrayList<String> newal=new ArrayList<String>();
for(Iterator<String> it=al.iterator();it.hasNext();)
{
//String str=it.next();//将str传入下面的contains中时结果还不一样,为什么?当然add的参数也改为str。情况1
if(!newal.contains(it.next()));//现在的结果没有java02为什么?
newal.add(it.next());
}
return newal;
}
}
复制代码
程序结果为java01,java03.当为情况1时,程序结果为java01,java01,java02,java03.这到底是为啥了?
作者:
hello world
时间:
2012-8-7 13:53
if(!newal.contains(it.next()));//现在的结果没有java02为什么?
26. newal.add(it.next());
27. }
你连续使用it.next()就相当于指针指向了当前指针的下一个指针,会漏掉上一个元素
作者:
余明辉
时间:
2012-8-7 14:19
使用next()方法的时候,迭代器的指针已经会向下走一次了,等于说你每循环1次,指针会走2次,会迭代出2个元素,1个是用来contains判断了,1个用来添加
下面是一个简单的分析图,希望能帮到你
11111.jpg
(32.57 KB, 下载次数: 36)
下载附件
2012-8-7 14:19 上传
作者:
黑马振鹏
时间:
2012-8-7 14:38
第一种next()的情况楼上的说的很清楚了。
楼主的第一种情况是程序结果为java01,java01,java02,java03.这到底是为啥了?
原因是:
String str=it.next();//将str传入下面的contains中时结果还不一样,为什么?当然add的参数也改为str。情况1
if(!newal.contains(str));//现在的结果没有java02为什么?
newal.add(str);
红色代码有问题,不应该加上分号
作者:
左建飞
时间:
2012-8-8 10:23
问题已解决
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2