list的遍历没有map快,而且还不方便存取,没有key。所以可以转换成map先:

public void initMarkInfo() {
List<MarkingAreaPojo> list = this.getService().getMarkAreaInfo(null,
null, null, null, null, null, null, null, null, null, null);
if (null != list) {
for (int i = 0; i < list.size(); i++) {
MarkingAreaPojo pojo = list.get(i);
markInfoMap.put(pojo.getMarkAreaCode(), pojo);
}
}
}

 

//具体的说法忘记了,下次要及时记录。

//for循环的基本方式,最快,但是有线程安全啊,你必须先计算出length

public void testFunction(){
for (int i = 0; i < array.length; i++) {
//todo
}
}

 

//foreach方式遍历和Iterator方式本质上是一样的,代码简洁,可以防止off-by-one问题,链式存储推荐。

 

public void testFunction(){
if (null != markInfoMap) {

//通过Map.entrySet遍历key和value,推荐,尤其是容量大时
for (Map.Entry<String, Object> entry : markInfoMap.entrySet()) {
MarkingAreaPojo pojo = (MarkingAreaPojo) entry.getValue();
//pojo = this.checkStatus(pojo);
if (null != pojo) {
markInfoMap.put(entry.getKey(), pojo);
}
}
}
}

 

使用foreach循环来迭代访问Collection集合里的元素更加简洁,这就是foreach循环带来的优势。与使用Iterator接口迭代访问集合元素类似地是,foreach循环中的迭代变量也不是集合元素本身,系统只是依次把集合元素的值赋给迭代变量,因此,在foreach循环中修改迭代变量的值也没有任何实际意义。

 

对List的遍历有三种方式   

第一种:   

[java] view plain copy
 
 在CODE上查看代码片派生到我的代码片
  1. for(Iterator<A> it = list.iterator(); it.hasNext();) {     
  2.     ......  
  3. }  

这种方式在循环执行过程中会进行数据锁定,    性能稍差,    同时,如果你想在循环过程中去掉某个元素,只能调用it.remove方法, 不能使用list.remove方法,  否则一定出并发访问的错误.   

 

 
第二种:
[java] view plain copy
 
 在CODE上查看代码片派生到我的代码片
  1. for(A a : list) {  
  2.     ......  
  3. }  
它内部还是调用第一种,    换汤不换药,    这种循环方式还有其他限制,    不建议使用它   
    
第三种:   
[java] view plain copy
 
 在CODE上查看代码片派生到我的代码片
  1. for(int i = 0; i < list.size(); i++) {  
  2.     A a = list.get(i);  
  3.     ......  
  4. }  
它内部不做锁定,    效率最高,    但是当写多线程时要考虑并发操作的问题!  

PS:简单说的,off-by-one error就是在说数组越界(我的理解),它包含两种情况。就像例子中的for循环,它定义了一个大小为5的数组,如国我们误将判断条件 i < 5 写成了 i <= 5,那么就会触发一个错误,这就是 off-by-one error。还有一种情况是我们将 i 初始化为 1,同样是一个 off-by-one error。