请问一下 遍历ArrayList的时候
for循环和Iterator有什么区别
可否详细点
for循环和Iterator有什么区别
可否详细点
解决方案 »
- java FileInputStream能定位吗?
- 系统任意时刻都最多只能有一个进程在运行,这句话对么??
- 怎么用java作一个对文件内容搜索的引擎
- 关于JScrollPanel的问题
- 请教文件读取问题
- 谁能说出123来?
- Exception in thread "main" java.lang.NoClassDefFoundError: maths (wrong name: cm/mxq/test/maths)
- 请教用RandomAccessFile类的问题
- 怎样用发送JAVAMAIL发送收信人是匿名地址的邮件?
- JBuilder的中文参考手册哪里能找到?
- 布局管理器 组件方向
- 求助 关于java程序的一个小错误!哪位大哥帮帮忙
iterator可以不用关心里面是怎么得到下一个的,可以很复杂
但是iterator一般用链表实现,可能性能相对低一点点
{
Iterator itr = c.iterator();
while(itr.hasNext())
{
...
}
for(Iterator itr1 = c.iterator(); itr.hasNext(); )
{
...
}
}
两者没有本质区别
比如 List getAList() {
list.add("a");
list.add("b");
return list;//假如list是实例变量。
}这样的话,别人再获得list对象后,可以再add内容,这样就会影响到你的list。
因此,上面的方法需要改为:List getAList() {
list.add("a");
list.add("b");
return list.clone();//假如list是实例变量。
}上面的方法有如下问题:
(1)使用clone,clone是一个费时的操作,并且往往容易出错。
(2)向你的API使用者提供了你的内部实现,如果以后你要把List改为Set,你对你的用户来说,你的API是失败的,别说增加一个方法getASet.这时候,就可以把方法写成:Iterator getAIterator() {
list.add("a");
list.add("b");
return list.iterator;//假如list是实例变量。
}
而迭代器则是为解决这个问题而产生的,它提供了一种通用的最简单和相对优化的方式遍历数据集。对于ArrayList,迭代器会用其效率高的根据索引取值,而针对LinkedList,则会直接取当前对象的下一个链接对象。
所以,其实针对ArrayList,用for是相对更快的。但是Iterator则更加通用。