• List<E> 接口简明


    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();
  • 相关阅读:
    CentOS 6.2安装Darwin Streaming Server
    流媒体技术笔记(协议相关)
    流媒体技术笔记(视频编码相关)
    CentOS6.2下编译mpeg4ip
    用popen函数操作其它程序的输入和输出
    给centos6.2安装yum源
    启动新进程(fork和exec系列函数实现)
    扩展Asterisk1.8.7的Dialplan Applications
    源码安装ffmpeg(带libx264)
    扩展Asterisk1.8.7的AMI接口
  • 原文地址:https://www.cnblogs.com/LittleTreasureBox/p/8821823.html
Copyright © 2020-2023  润新知