集合遍历必须用迭代器吗? for(对象 o:集合)增强for 会出错么?貌似底层原理都是一样的,这些东西用的也是迭代器的原理,要出错应该都出错吧。。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 你也只是说了,用foreach只是容易出错,那么掌握不就好了! 怎么会呢 都是一样的如果是ArrayList 还是别用iterator 用ArrayList的get(int index)要好 对 这个很好用,代码清晰,代码量少。值得信赖。这个最好,集合用泛型。不会出错的,不用泛型只能这么用:for(object o:集合),之后还要强转。 除了数组,foreach用的就是iterator,在遍历时用add或remove可能会出错,如果确实需要在遍历时改变集合,可以参见java.util.concurrent包中的集合类 增强for在底层也是迭代器实现 for(迭代器名 : 集合名) getE get(int index)返回列表中指定位置的元素。 参数:index - 要返回的元素的索引 返回:列表中指定位置的元素 抛出: IndexOutOfBoundsException - 如果索引超出范围 (index < 0 || index >= size())list接口中提供了get方法 结合循环也能遍历 不一定啊!!比如list 就可以用list.size() 然后for循环!! foreach就是使用的iterator,不然为什么要求实现Iterable接口。 foreach遍历的本质就是使用迭代器。因此在使用foreach遍历时不能修改集合的结构,不然会报错。 foreach针对数组和迭代器,都一样,按道理是不应该改集合结构的,如果要改,看什么数据结构,及迭代的实现方式,再决定会不会出错 foreach的遍历集合的中途,不能改变集合的(如删除某个元素) 如果是List集合直接建议使用for循环,如果是Map集合还是使用Iterator吧! foreach用法主要用于数组,但是也可以用于任何Collection对象。、foreach可以对容器及数组进行遍历。Iterator只可以对容器进行遍历。 使用迭代器 不会的存在线程的安全问题,如果用for 或者是 增强for 在集合的增删操作的时候会出现错误的。 ConcurrentModificationException,由于你在迭代时修改了元素。你可以使用线程安全的集合去代替,就不会出错。比如CopyOnWriteArrayList。你要明白出错的本质是因为什么。主要是这些集合并不是线程安全的。 你可以使用迭代,增强循环,或者直接for循环 在不修改集合中的数据的时候,使用 foreach 并不容易出错。如果要在迭代中修改,那么分两种情况,一种是单线程,推荐直接使用 Iterator,循环中判断 next 出来的数据如果不用,调用 remove 即可。一种是多线程,这时需要加锁保证一个线程在迭代的时候,其它线程不能修改这个集合,否则可能出错(数据较少时,比较难出现错误,因为可能一个线程迭代完后,CPU 才来得及处理其它线程)。 setMediaLocation()里面的文件地址设置问题? 有关java的Comparator有些疑问! 关于字符串比较的问题,求高手解答 求救:程序中取连接池的当前连接数(在线等) 初学者问题 数组输出是NAN 调查: 大家对开源项目是否感兴趣,是否想亲自参加开发,为什么? 为什么没人用Visual j++ 呀?都用Jbuilder??两个有什么不同 急!谁能告诉我”Unsupported major.minor version 48.0“是什么错,应该如何解决 初学JAVA,有些问题搞不懂 如何删除掉hudson的job呢 怎么在FX中把圆做的像球一样
如果是ArrayList 还是别用iterator 用ArrayList的get(int index)要好
增强for在底层也是迭代器实现 for(迭代器名 : 集合名)
E get(int index)返回列表中指定位置的元素。 参数:
index - 要返回的元素的索引
返回:
列表中指定位置的元素
抛出:
IndexOutOfBoundsException - 如果索引超出范围 (index < 0 || index >= size())list接口中提供了get方法 结合循环也能遍历
因此在使用foreach遍历时不能修改集合的结构,不然会报错。
foreach可以对容器及数组进行遍历。
Iterator只可以对容器进行遍历。
如果要在迭代中修改,那么分两种情况,
一种是单线程,
推荐直接使用 Iterator,循环中判断 next 出来的数据如果不用,调用 remove 即可。
一种是多线程,
这时需要加锁保证一个线程在迭代的时候,其它线程不能修改这个集合,否则可能出错(数据较少时,比较难出现错误,因为可能一个线程迭代完后,CPU 才来得及处理其它线程)。