概述
public static void main(String[] args) {
long start,end,forStart,forEnd;
ArrayList<Integer> al=newArrayList<Integer>();
for(int i=0;i<900000;i++){
al.add(new Integer(4));
}
forStart=System.currentTimeMillis();
for(int j=0;j<al.size();j++){
al.get(j);
}
forEnd=System.currentTimeMillis();
Iterator<Integer>it=al.iterator();
start=System.currentTimeMillis();
while(it.hasNext()){
it.next();
}
end=System.currentTimeMillis();
System.out.println("for用时:"+(forEnd-forStart)+"nIterator用时:"+(end-start));
}
从上述来看,则是for循环更快些,但是如果将测试的ArrayList替换成LinkedList,再来执行一遍相同的代码,将会得到惊讶的结果:for循环的效率实在是太低了,让人都没有耐心等程序执行完成了。上种情况的出现for比iterator快,是因为对于ArrayList索引直接取值快,随机访问速度是ArrayList的优势所在。
综上所述,还是尽量提倡用iterator来遍历集合效果会更加好点。
-------------------------------------------------
今天做了I09项目的一段程序,期间用到Iterator遍历,后考虑到代码的简介性,换做for循环去写.竟然发现原本在Iterator下跑出的程序换做for 竟然java.lang.OutOfMemoryError.
大概数据条数124万.
try {
PolicyCleanSav p = new PolicyCleanSav();
Iterator it = p.getAllPolicyCleanSav();
while (it.hasNext()) {
I09PolicyCleanSavI temp = (I09PolicyCleanSavI) it.next();
System.out.println(temp.getInsured());
}
} catch (Exception e) {
System.out.println(e.getMessage());
}
/*
try {
PolicyCleanSav p = new PolicyCleanSav();
List<I09PolicyCleanSavI> l = p.getAllPolicyCleanSavList();
for(I09PolicyCleanSavI temp:l){
System.out.println(temp.getPolicyholder());
}
// for(int i=0;i<=l.size();i++){
// System.out.println(l.get(i).getPolicyholder());
// }
} catch (Exception e) {
System.out.println(e.getMessage());
} */
当在网上看到这段资料"关键就在于 it产生时,游标的位置在list集合里的第一个对象之前,所以取第一个对象要先it.next()。"
顿悟,作为Iterator他的操作对象是getAllPolicyCleanSav()的游标;且为逐行装载,处理完后.
通俗上可以理解为索引.
但是 List<I09PolicyCleanSavI> l = p.getAllPolicyCleanSavList();
for(I09PolicyCleanSavI temp:l){
他的操作对象是从数据库中取出的结果集,相比之下,首先将结果集装载到jvm中去.自然jvm消耗较大.
所以如果不涉及crud操作.大数据情况下还是Iterator
-------------------------------------------------
今天做了I09项目的一段程序,期间用到Iterator遍历,后考虑到代码的简介性,换做for循环去写.竟然发现原本在Iterator下跑出的程序换做for 竟然java.lang.OutOfMemoryError.
大概数据条数124万.
try {
PolicyCleanSav p = new PolicyCleanSav();
Iterator it = p.getAllPolicyCleanSav();
while (it.hasNext()) {
I09PolicyCleanSavI temp = (I09PolicyCleanSavI) it.next();
System.out.println(temp.getInsured());
}
} catch (Exception e) {
System.out.println(e.getMessage());
}
/*
try {
PolicyCleanSav p = new PolicyCleanSav();
List<I09PolicyCleanSavI> l = p.getAllPolicyCleanSavList();
for(I09PolicyCleanSavI temp:l){
System.out.println(temp.getPolicyholder());
}
// for(int i=0;i<=l.size();i++){
// System.out.println(l.get(i).getPolicyholder());
// }
} catch (Exception e) {
System.out.println(e.getMessage());
} */
当在网上看到这段资料"关键就在于 it产生时,游标的位置在list集合里的第一个对象之前,所以取第一个对象要先it.next()。"
顿悟,作为Iterator他的操作对象是getAllPolicyCleanSav()的游标;且为逐行装载,处理完后.
通俗上可以理解为索引.
但是 List<I09PolicyCleanSavI> l = p.getAllPolicyCleanSavList();
for(I09PolicyCleanSavI temp:l){
他的操作对象是从数据库中取出的结果集,相比之下,首先将结果集装载到jvm中去.自然jvm消耗较大.
所以如果不涉及crud操作.大数据情况下还是Iterator
最后
以上就是忧虑寒风为你收集整理的关于 for循环和Iterator遍历的全部内容,希望文章能够帮你解决关于 for循环和Iterator遍历所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复