有序集合的总结

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进行线程安全的限制。

你可能感兴趣的:(有序集合的总结)