package cc.knms.appservice.test;

 import java.text.ParseException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List; public class Test {
/**
* @autho 方华哥哥
* @remark 关于list 性能 ,删除其中的元素测试
* //附带说下这三个循环的性能
* @date 2016年12月21日 下午1:48:33
* @param
* @return
* @throws ParseException
*/
public static void main(String[] args) throws ParseException {
// 循环中 删除元素测试
List<String> list = new ArrayList<String>();
list.add("a");
list.add("b");
list.add("c");
list.add("d");
list.add("e"); for (int i = 0; i < list.size(); i++) {
if (list.get(i).equals("b")) {
list.remove(i);
}
System.out.println(list.get(i));
System.out.println(list + "--");
}
//性能:内部不锁定,效率最高,但是当写多线程时要考虑并发操作的问题
/* 内部不锁定也是其缺点,这样会导致循环当中删除某个元素可能会出现不必要的问题
* 通过结果我们可以看到,在基本的for循环中 我们也能正常的删除元素,但是这里的指针会向前移动. a b-- c c-- d c-- e
* c--
*/ for (String string : list) {
if (string.equals("b")) {
list.remove(string);
}
System.out.println(string);
}
// 性能:当遍历集合或数组时,如果需要访问集合或数组的下标,
// 那么最好使用旧式的方式来实现循环或遍历,而不要使用增强的for循环,因为它丢失了下标信息其实 /*
* 在增强for循环中删除元素我们可以看到直接报错 aException in thread "main" b
* java.util.ConcurrentModificationException
*/ Iterator<String> it = list.iterator();
while (it.hasNext()) {
if (it.next().equals("b")) {
it.remove();
}
System.out.println(list);
}
//性能:执行过程中会进行数据锁定,性能稍差,但是同时,如果你想在循环过程中去掉某个元素,为了避免不必要的问尽量使用it.remove方法;
/*
* Iterator 也能正常的删除,在循环中需要删除数据,然后在获取某个值的时候建议用Iterator,
* 如果用基本的for循环的时候,可能得出的值会错乱,for循环每删除一个元素,指针会像前移动,如果通过get去获取值的时候可能不是自己想要的
* Iterator 则不会
* [a, b, c, d, e] [a, c, d, e] [a, c, d, e] [a,
* c, d, e] [a, c, d, e]
*/
} }

最新文章

  1. angularjs之filter过滤器
  2. C#学习链接
  3. Python之路【目录】 2
  4. QT 使用jsoncpp
  5. php笔试题(1)--转载
  6. openstack theme topic
  7. CODEVS 1287 矩阵乘法
  8. 10分钟精通SharePoint - SharePoint安装
  9. Android两级导航菜单栏的实现--FragmentTabHost结合ViewPager与Android 开源项目PagerSlidingTabStrip
  10. Mybatis技术原理理——整体流程理解
  11. Java高并发情况下的锁机制优化
  12. ipython+notebook使用教程(转载)
  13. Blender 精确建模3D打印注意事项
  14. element UI form 验证
  15. Oracle EBS PO rcv_shipment_headers 数据缺失
  16. [c#][福利]BTTool种子文件修改工具
  17. Docker HUB 的重要性
  18. php删除非空目录代码实现
  19. 《ASP.NET Web API 2框架揭秘》
  20. tornado上传大文件以及多文件上传

热门文章

  1. JavaScript document属性和方法
  2. Jenkins_Maven_Git 持续集成及自动化部署 GentOS版
  3. c#缓存介绍(转)
  4. STL库中的正态分布函数
  5. flyby function
  6. NOIP 考前DP 复习
  7. DotNetBar中TextBoxDropDown效果图
  8. POM
  9. git使用学习
  10. iOS: How To Make AutoLayout Work On A ScrollView