List接口、ArrayList类和LinkedList类 笔记
2015-12-25 14:05
288 查看
List接口继承了Collection接口,它包含了Collection接口的所有方法,外加其他一些方法:
remove方法对LinkedList类的使用:
LinkedList对get调用的效率不高,而且,对remove的调用同样低效,因为达到位置i的代价是昂贵的。
小tips:
在增强的for循环中也就是利用iterator进行迭代时,是不能对正在被迭代的集合上进行结构上的改变(即对该集合使用add、remove或clear方法),否则迭代器就不再合法(抛出ConcurrentModificationException异常)。只有在需要立即使用一个迭代器的时候,才获取迭代器。然而,如果迭代器调用了自己的remove方法,那么这个迭代器就仍然是合法的。
关于ListIterator接口:
ListIterator扩展了Iterator的功能:
public interface List<AnyType> extends Collection<AnyType> { AnyType get(int index); AnyType set(int index, AnyType newVal); void add(int index, AnyType x); void remove(int index); ListIterator<AnyType> listIterator(int pos); }ArrayList类提供了List ADT的一种可增长数组的实现。LinkedList类则提供了List ADT的双链表实现。
remove方法对LinkedList类的使用:
public static void removeEvensVer1(List<Integer> list) { int i = 0; while(i < list.size()) { if(list.get(i) % 2 == 0) { list.remove(i); } else { i++; } } }
LinkedList对get调用的效率不高,而且,对remove的调用同样低效,因为达到位置i的代价是昂贵的。
小tips:
在增强的for循环中也就是利用iterator进行迭代时,是不能对正在被迭代的集合上进行结构上的改变(即对该集合使用add、remove或clear方法),否则迭代器就不再合法(抛出ConcurrentModificationException异常)。只有在需要立即使用一个迭代器的时候,才获取迭代器。然而,如果迭代器调用了自己的remove方法,那么这个迭代器就仍然是合法的。
public static void removeEvensVer3(List<Integer> list) { Iterator<Integer> iterator = list.iterator(); while(iterator.hasNext()) { if(iterator.next() % 2 == 0) { iterator.remove(); } } }上面指出一种成功的想法。对于一个LinkedList,对该迭代器的remove方法的调用只花费常数时间。因此,对于LinkedList,整个程序花费线性时间。对于一个ArrayList,即使迭代器位于需要被删除的节点上,其remove方法仍然是昂贵的,因为数组的项必须要移动,整个程序仍然花费二次时间。
关于ListIterator接口:
ListIterator扩展了Iterator的功能:
public interface ListIterator<AnyType> extends Iterator<AnyType> { boolean hasPrevious(); AnyType previous(); void add(AnyType x); void set(AnyType newVal); }
相关文章推荐
- CLRS 12.1什么是二叉搜索树
- iOS---如何把导航默认的返回按钮设置成“返回”
- Python基础教程 正则表达式 学习笔记
- 免费APP在线測试工具以及其用法
- C#后台对javascript的escape()方法编码后的字符进行解码
- 《循序渐进Linux》第二版即将出版发行(附封面)
- 《循序渐进Linux》第二版即将出版发行(附封面)
- 什么是DTO?
- 进程监控工具supervisor 启动Mongodb
- 在Apache+mod_wsgi+python的基础上搭建https安全访问
- Python编程(二):Python进程、线程的那点事儿
- 行为型:设计模式之访问者模式(二十三)
- 用流域和最佳的阈值进行慢性淋巴细胞性白血病细胞分割
- Java程序员之JS(一) 入门
- 小记录
- 嵌入式Linux学习-----u-boot移植
- iOS_字符串显示不同颜色
- socket小实例
- Android 图片Exif信息相关的获取与修改
- Activity Task