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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© lipanfeng 黑马帝   /  2012-3-22 06:26  /  2109 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

取出集合中的元素用迭代器好呢还是直接去循环遍历集合好?

5 个回复

倒序浏览
迭代器具有通用型,适合各个容器,它是单例模式的一个应用,个人建议使用迭代器
对于集合类中的任何一个实现类,都可以返回这样一个Iterator对象。就和循环一样,好处是可以适用于任何一个类,而且实际上java对他进行了优化,比直接用index访问快一点。
比如说这样一个例子
ArrayList< String > arr = new ArrayList< String >();
Iterator it = arr.iterato()r;
迭代的时候可以这样
while( it .hasNext() ){
    //做一些处理啦,比如
    System.out.print( it。next );
}
配合上泛型,一个好处是it.next()可以不用类型转换!!
回复 使用道具 举报
本帖最后由 lipanfeng 于 2012-3-22 06:55 编辑

it.next();里边封装了循环index取出集合元素。这样说对么?
回复 使用道具 举报
直接高级for循环,那才是最好用的。
回复 使用道具 举报
Iterater接口是Java集合框架的成员,Iterater对象被称为迭代器,主要用于遍历Collection集合中的元素。它定义了三个方法:boolean hasNext(),Object next(),void remove();当使用Iterater来迭代访问Collection集合元素时,Collection集合里的元素不能被改变,只有通过Iterater的remove方法来删除上一次next方法返回的集合元素,
//获取books集合对应的迭代器
Iterator it = books.iterator();
while(it.hasNext())
{
String book = (String)it.next();
System.out.println(book);
if (book.equals("JavaEE"))
{
//从集合中删除上一次next返回的元素
it.remove();
//使用Iterator迭代过程中,不可修改集合元素,下面代码引发异常
//books.remove(book);
}
}
foreach循环访问集合元素更简洁,但foreach循环中的迭代变量也不是集合元素本身,系统只是把集合元素的值赋给迭代变量,修改迭代变量的值没有意义,当集合的元素被改变时也会引发异常。
for (Object obj : books)
{
String book = (String)obj;
System.out.println(book);
if (book.equals("JavaEE"))
{
//下面代码会引发ConcurrentModificationException异常
books.remove(book);
}
}

回复 使用道具 举报
iterator是对于collection进行迭代的迭代器,for只要是循环即可。需要注意的是Map集合的遍历:有两种方法。第一种是通过entryset变成Set对象.在调用Set的iterator方法最后分离出key和value。第二种是通过keyset得到key的set集合,通过迭代器迭代各key最后通过getvalue(key)得到各value
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马