Java容器来一发(一)List

一、List简介

List是一种线性的数据结构,Java中对List实现主要有Vector、ArrayList、LinkedList、SynchronizedList等。

  • Vector和ArrayList都是通过数组实现的,优点是适合随机查找和遍历,不适合频繁插入和删除。

  • Vector支持线程同步,因此访问开销更大。

  • LinkedList是用链表结构存储数据,适合动态插入和删除,随机访问和遍历速度相对较慢。

  • SynchronizedList也是线程安全的,但和Vector有区别。Vector所有需要同步的方法都使用同步方法实现,SynchronizedList使用同步代码块实现。SynchronizedList中实现的类并没有都使用synchronized同步代码块。SynchronizedList可以指定锁定的对象,mutex是成员变量。

二、List的基本操作


public interface List<E> extends Collection<E> {

    int size();

    boolean isEmpty();

    boolean contains(Object o);

    Iterator<E> iterator();

    Object[] toArray();

    boolean add(E e);

    boolean remove(Object o);

    boolean containsAll(Collection<?> c);

    boolean addAll(Collection<? extends E> c);

    boolean addAll(int index, Collection<? extends E> c);

    boolean removeAll(Collection<?> c);

    void clear();

    boolean equals(Object o);

    int hashCode();

    E get(int index);

    E set(int index, E element);

    void add(int index, E element);

    E remove(int index);

    int indexOf(Object o);

    int lastIndexOf(Object o);

    ListIterator<E> listIterator();

    ListIterator<E> listIterator(int index);

    List<E> subList(int fromIndex, int toIndex);
}

三、CopyOnWriteArrayList

Copy-On-Write简称COW,其基本思路是,从一开始大家都在共享同一个内容,当某个人想要修改这个内容的时候,才会真正把内容Copy出去形成一个新的内容然后再改,这是一种延时懒惰策略。

CopyOnWrite容器即写时复制的容器。通俗的理解是当我们往一个容器添加元素的时候,不直接往当前容器添加,而是先将当前容器进行Copy,复制出一个新的容器,然后新的容器里添加元素,添加完元素之后,再将原容器的引用指向新的容器。这样做的好处是我们可以对CopyOnWrite容器进行并发的读,而不需要加锁,因为当前容器不会添加任何元素。所以CopyOnWrite容器也是一种读写分离的思想,读和写不同的容器。COW是不能保证可见性的。

猜你喜欢

转载自blog.csdn.net/ss1300460973/article/details/85550909