黑马程序员技术交流社区

标题: 集合中元素的取出 [打印本页]

作者: lipanfeng    时间: 2012-3-22 06:26
标题: 集合中元素的取出
取出集合中的元素用迭代器好呢还是直接去循环遍历集合好?
作者: 陈从宾    时间: 2012-3-22 06:44
迭代器具有通用型,适合各个容器,它是单例模式的一个应用,个人建议使用迭代器
对于集合类中的任何一个实现类,都可以返回这样一个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:54
本帖最后由 lipanfeng 于 2012-3-22 06:55 编辑

it.next();里边封装了循环index取出集合元素。这样说对么?
作者: lucky_xingxing    时间: 2012-3-22 09:10
直接高级for循环,那才是最好用的。
作者: 张锦萍    时间: 2012-3-22 09:37
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);
}
}


作者: 和心愿    时间: 2012-3-22 10:15
iterator是对于collection进行迭代的迭代器,for只要是循环即可。需要注意的是Map集合的遍历:有两种方法。第一种是通过entryset变成Set对象.在调用Set的iterator方法最后分离出key和value。第二种是通过keyset得到key的set集合,通过迭代器迭代各key最后通过getvalue(key)得到各value




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2