黑马程序员技术交流社区
标题:
【已解决】关于泛型的问题
[打印本页]
作者:
孔肖
时间:
2012-9-2 10:34
标题:
【已解决】关于泛型的问题
本帖最后由 孔肖 于 2012-9-4 17:51 编辑
在Arraylist去除重复元素的时候,定义一个方法
private static List<Person> singleElement(List<Person> list)
{
List<Person> newList = new ArrayList<Person>();
Iterator<Person> it = list.iterator();
while(it.hasNext())
{
//Person p = it.next();
//
将上一句注释掉,这里直接用 it.next() 时,会发生 NoSuchElementException ,这是为什呢?不是已经用泛型明确了集合中存储的就是Person对象了吗?
if(!newList.contains(it.next()))
newList.add(it.next());
}
return newList;
}
作者:
王德升
时间:
2012-9-2 10:41
private static List<Person> singleElement(List<Person> list)
{
List<Person> newList = new ArrayList<Person>();
Iterator<Person> it = list.iterator();
while(it.hasNext())
{
//Person p = it.next();
// 因为next() 返回的是迭代的下一个元素。你只有写出来才会返回元素,并且这个元素是Person类型的,所以用Person接收,
if(!newList.contains(it.next()))
//你这句也调用了it.next()编译是报错的,
newList.add(it.next());
}
return newList;
}
作者:
孙沛
时间:
2012-9-2 10:44
本帖最后由 孙沛 于 2012-9-2 10:46 编辑
it.next()返回的是一个object类型,必须要定义的,你可以定义为Person对象类型,也可以定义为Object对象类型
所以可以是Person p = it.next();,也可以是Object ob = it.next();
作者:
王金科
时间:
2012-9-2 12:58
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class Test{
public static void main(String[] args){
List<Integer> list = new ArrayList<Integer>();
list.add(1);
list.add(2);
list.add(3);
list.add(5);
Iterator<Integer> it = list.iterator();
int i = 0;
while(it.hasNext()){
i++;
System.out.println(it.next());
System.out.println(it.next());
System.out.println(it.next());
System.out.println(it.next());
//System.out.println(it.next()); //这里不注释掉,就会抛出java.util.NoSuchElementException异常
}
System.out.println(i);
}
}
复制代码
你的情况就相当于上面这个代码,出现这个问题不是泛型引起的,而是没有元素了.
it.next();返回下一个元素,你在代码里多次使用了it.next();每调用一次it.next();就返回下一个值
在我的这段演示代码中,list里的元素都取出来了,而 i 最终的值是1,说明只循环了一次.更证明it.next();每次都是取列表中的下一个元素
如果没有下一个元素了,就跑java.util.NoSuchElementException异常了
while里的 it.hasNext() ,就是判断是否还有下一个元素
作者:
AngieFans85
时间:
2012-9-3 08:23
你的问题很简单:
if(!newList.contains(it.next()))
newList.add(it.next());
打个比方,假如你的it里只有一个元素,第一次调用it.next()方法返回一个元素(但是你没有用一个Person引用来指向这个返回的元素),然后再调用一次it.next()方法,就会再返回下一个元素,但是你的it中就一个元素,那么第二次调用it.next()方法就无法找到元素,所以就会报NoSuchElementException异常.
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2