List

作者: 甜甜圈李 | 来源:发表于2020-04-14 23:44 被阅读0次

    并发修改异常产生的原因及解决方案

    需求:我有一个集合,请问,我想判断里面有没有"world"这个元素,如果有,我就添加一个"javaee"元素,请写代码实现。

    List list = new ArrayList();

    list.add("a");

    list.add("b");

    list.add("world");

    list.add("d");

    list.add("e");

    Iterator it = list.iterator();

    while(it.hasNext()) {

    String str = (String)it.next();

    if(str.equals("world")) {

    list.add("javaee"); //这里会抛出ConcurrentModificationException并发修改异常

    }

    }

    ConcurrentModificationException出现

    迭代器遍历,集合修改集合

    解决方案

    a:迭代器迭代元素,迭代器修改元素(ListIterator的特有功能add)

    b:集合遍历元素,集合修改元素

    ListIterator lit = list.listIterator(); //如果想在遍历的过程中添加元素,可以用ListIterator中的add方法

    while(lit.hasNext()) {

    String str = (String)lit.next();

    if(str.equals("world")) {

    lit.add("javaee");

    //list.add("javaee");

    }}

    List的三个子类的特点

    ArrayList:

    底层数据结构是数组,查询快,增删慢。

    线程不安全,效率高。

    Vector:

    底层数据结构是数组,查询快,增删慢。

    线程安全,效率低。

    Vector相对ArrayList查询慢(线程安全的)

    Vector相对LinkedList增删慢(数组结构)

    LinkedList:

    底层数据结构是链表,查询慢,增删快。

    线程不安全,效率高。

    Vector和ArrayList的区别

    Vector是线程安全的,效率低

    ArrayList是线程不安全的,效率高

    ArrayList和LinkedList的区别

    ArrayList底层是数组结果,查询和修改快

    LinkedList底层是链表结构的,增和删比较快,查询和修改比较慢

    我们到底使用谁呢?

    查询多用ArrayList

    增删多用LinkedList

    如果都多ArrayList

    相关文章

      网友评论

          本文标题:List

          本文链接:https://www.haomeiwen.com/subject/idmfvhtx.html