美文网首页
有序集合的总结

有序集合的总结

作者: 初阳拾叁 | 来源:发表于2019-08-14 16:03 被阅读0次

    1.有序集合总结

    有序的集合包含ArrayList,copyOnWriteArrayList,vector和LinkList

    基础类型为动态数组(前三个)、链表(LinkList)

    由于基础类型的不同,造成两者在增删改查方面的效率不同。

    数组类型的有序集合读取很快以及修改很快,但是删除和添加很慢。但是链表类型的有序集合读取很慢以及修改很慢,但是删除和添加很快

    2.序列换

    基本上所有的集合类的基础数据都有transient修饰,这是因为动态数组有一些是空的数据,所以不能直接序列化展示,但是基本上都重写了方法writeObject、readObject,可以完成基本的序列化和反序列化。

    3.安全与效率

    有序集合中vector和copyonwriteArraylist都是线程安全的,前者和arrayList基本一致但是所有的方法上加上了synchronized字段修饰,效率低小安全性高。后者使用的lock来加锁,代码如下:

    public boolean add(E e) {
            final ReentrantLock lock = this.lock;
            lock.lock();
            try {
                Object[] elements = getArray();
                int len = elements.length;
                Object[] newElements = Arrays.copyOf(elements, len + 1);
                newElements[len] = e;
                setArray(newElements);
                return true;
            } finally {
                lock.unlock();
            }
        }
    

    整个类中需要修改的方法都有lock加锁以及修改新创建的数组之后指向新创建的数组。这样就造成了,读取的数据可能不是最新的,但是最终结果是最新的。

    有序集合的现场安全还可以使用方法Collections.synchronizedList()来包装,这个是线程的比较好的安全和效率平衡的方法。

    当然最好的方法是自己对arrayList进行线程安全的限制。

    相关文章

      网友评论

          本文标题:有序集合的总结

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