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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© M单色调 中级黑马   /  2014-7-23 18:01  /  1281 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

今天练习ArrayList,遇到的问题。
大家看看这两种表示有什么不同:
public static ArrayList isEqual(ArrayList list){
//定义一个新的,用于存放不重复元素
ArrayList newlist=new  ArrayList();
Iterator it=list.iterator();
while(it.hasNext()){
Object obj=it.next();
if(!newlist.contains(obj))
   newlist.add(obj);
}
return newlist;
}
问题来了,如果把Object obj=it.next();这句去掉,下面的改成:
if(!newlist.contains(it.next()))
   newlist.add(it.next());
输出的结果会不一样,求解释?

5 个回复

倒序浏览
  1. if(!newlist.contains(it.next()))
  2.    newlist.add(it.next());
复制代码

这里第一句取了一次数据进行比较,比较之后不重复则执行第二句,而第二句不是把这个数据存进新列表,而是取下一个数据存进新列表。
比如{1, 2},第一句判断 1 是否在新列表中,不在则把 2 存进新列表,这显然是不对的
回复 使用道具 举报
第二种显然不对啊,你会发现你判断的元素和加的元素不是一个元素。
回复 使用道具 举报
it.next()调用了两遍,调用一次已经跑到下一个值了,再调用一遍就跑到下下个值了
回复 使用道具 举报
M单色调 来自手机 中级黑马 2014-7-24 01:10:14
报纸
嗯。谢谢了!
回复 使用道具 举报
楼上正解!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马