java.util.List<E>接口ListIteratorequals 方法

List 是 Collection 接口的子接口,具备了 Collection 的所有方法。


List 体系特有的共性方法中,查阅方法发现 List 的特有方法都有索引,这是该集合最大的特点。


List : 有序( 元素存入集合的顺序和取出的顺序一致 ) ,元素都有索引。元素可以重复。

  • ArrayList : 底层数据结构是数组, 线程不同步,ArrayList 替代了 Vector ,随机访问速度快。
  • LinkedList : 底层数据结构是链表,线程不同步,增删元素的速度快。
  • Quene : Queue接口窄化了对LinkedList的方法的访问权限。

API java.util.List

  • 添加:

    add(index,element) :在指定的索引位插入元素。

    addAll(index,collection) :在指定的索引位插入一堆元素。
  • 删除:

    remove(index) :删除指定索引位的元素。 返回被删的元素。
  • 获取:

    Object get(index) :通过索引获取指定元素。

    int indexOf (obj) :获取指定元素第一次出现的索引位,如果该元素不存在返回-1;

    所以,通过-1,可以判断一个元素是否存在。

    int lastIndexOf(Object o) :反向索引指定元素的位置。

    List subList (start,end) :获取子列表。
  • 修改:

    Object set(index,element) :对指定索引位进行元素的修改。
  • 获取所有元素:

    ListIterator listIterator ():list 集合特有的迭代器。

for ( int x = 0; x < list.size(); x++ ){
System.out.print("get:" + list.get(x));
}

角标遍历

并发修改

在进行列表元素迭代的时候,如果在迭代过程中,迭代器检测出了列表从外部被修改了。 会抛出ConcurrentModificationException 异常。

List<String> list = new LinkedList<>();
...
ListIterator<String> it1 = list.listIterator();
ListIterator<String> it2 = list.listIterator();
it1.next();
it1.remove();
it2.next() //throws ConcurrentModificationException
  • 导致的原因是:

    大多数集合类返回的快速失败迭代器在遍历时不允许结构性修改(结构性修改指添加,删除和更新一个元素) 当遍历的同时被结构性修改,就会抛出ConcurrentModificationException异常。

  • 如何解决呢?

    在迭代器创建之后,如果从结构上对映射进行修改,除非通过迭代器自身的 remove 或 add 方法,其他任何时间任何方式的修改,迭代器都将抛出 ConcurrentModificationException。编写依赖于此异常程序的方式是错误的,正确做法是:迭代器的快速失败行为应该仅用于检测程序错误。

equals 方法

对于list 集合,底层判断元素是否相同,其实用的是元素自身的equals 方法完成的。所以建议元素都要复写equals 方法 ,建立元素对象自己的比较相同的条件依据。

LinkedList : 的特有方法。

  • addFirst();
  • addLast();
  • offerFirst();
  • offerLast();
  • getFirst():获取链表中的第一个元素。如果链表为空,抛出 NoSuchElementException;
  • getLast();
  • peekFirst();获取链表中的第一个元素。如果链表为空,返回 null。
  • peekLast();
  • removeFirst():获取链表中的第一个元素,但是会删除链表中的第一个元素。如果链表为空,抛出NoSuchElementException
  • removeLast();
  • pollFirst();获取链表中的第一个元素,但是会删除链表中的第一个元素。如果链表为空,返回 null。
  • pollLast();

最新文章

  1. wpf 加载项目图片的几种写法
  2. No Launcher activity found!
  3. mac os x安装php7.0和phalcon3.0
  4. LPTHW 笨方法学习python 16章
  5. Ubuntu 14.10下安装深度音乐客户端
  6. JavaScript实现简单的打印功能
  7. jacob 操作word转pdf
  8. 从头開始写项目Makefile(七):统一目标输出文件夹
  9. vector的成员函数解析
  10. python网络爬虫学习笔记
  11. stylus选中hover元素的兄弟元素下的子元素
  12. python实例编写(2)--等待,一组对象,层级元素,frame对象处理
  13. destoon分页
  14. PAT1070:Mooncake
  15. 【PAT】B1005 继续(3n+1)猜想
  16. 前端动态属性页面的 要用id做name 因为这样方便在提交表单时候取到值
  17. springboot 集成mybatis plus3
  18. Linux - 在当前系统内查找信息的方法
  19. protobuf 测试使用
  20. linux使用bin文件安装jdk

热门文章

  1. servlet的执行过程
  2. [luogu1168]中位数_优先队列
  3. js 关于日期,字符串转化
  4. 转)sqlite 数据类型
  5. oracle帐号scott被锁定如何解锁
  6. mybatis整合oracle 实现一对多查询 备注?
  7. hosts文件路径及文件介绍
  8. KS检验统计量的扩展应用(CMap)
  9. 使用linux下的crontab定时任务跑定时脚本
  10. php 常用数据大全