list
来源:互联网 发布:大图打印 软件 编辑:程序博客网 时间:2024/06/07 06:48
直接使用Iterator一个基本法则:若对正在被迭代的集合进行结构上的改变(add、remove、clear),则迭代器就不再合法。这意味着只有在需要立即使用一个迭代器的时候才应该获取迭代器。如果迭代器调用了自己的remove方法,则迭代器仍是合法的。
在表的前端添加项来构造一个list,LinkedList的运行时间是O(N),ArrayList的运行时间是O(N^2),因为在ArrayList在前端添加是一个O(N)操作。在LinkedList中对get的调用是O(N)操作。但是使用一个增强的for循环,则它对任意的List运行时间都是O(N),因为迭代器有效的从一项到下一项推进。
对搜索而言,两者都是低效的,对Collection的contains和remove方法的调用都消耗线性时间。
public static void removeEvensVer2(List <Integer> lst)
{
for (Integer x : lst)
if (x % 2 == 0)
lst.remove(x);
}
在上述的算法中会产生异常。因为当一项被删除后,有增强的for循环所使用的基础迭代器是非法的。
public static void removeEvensVer3(List <Integer> lst)
{
Iterator <Integer> itr = lst.iterator();
while (itr.hasNext())
if (itr.next() % 2 == 0)
itr.remove();
}
上述算法对LinkedL而言程序消耗的是线性时间;但是对于一个ArrayList,其remove方法是仍然是昂贵的,对于ArrayList整个程序仍然花费二次时间。
- List
- list
- List
- LIST
- list
- list
- List
- list
- list
- List
- list
- LIST
- List
- List
- List
- list
- list
- list
- hdu2923 Einbahnstrasse map+floyd最短路
- memset ,memcpy 和strcpy 的根本区别?
- [小代码]判断网络是否可用
- Android自适应屏幕方向、大小和分辨率
- c# 自定义事件和委托
- list
- Android--XML文件解析之PULL模式解析
- Ubuntu14.04安装JDK
- struts2核心工作流程与原理
- 关于RabbitMQ
- MD(d)、MT(d)编译选项的区别————简单易懂
- PHP 一些安全设置
- 跳转Home界面
- cocos2d-x 框架深入分析(二)—— CCScheduler