对比Vector、ArrayList、LinkedList有何区别?
- Vector、ArrayList都是以类似数组的形式存储在内存中,LinkedList则以双向链表的形式进行存储。
- List中的元素有序、允许有重复的元素,Set中的元素无序、不允许有重复元素。
有序或无序是指是否按照其添加的顺序来存储对象。List 是按照元素的添加顺序来存储的。而 Set 的实现类都有一套自己的排序算法,每添加一个元素,都会按照其内部算法将元素添加到合适的位置,所以不能保证内部存储是按元素添加的顺序而存储的。
- Vector线程同步,ArrayList、LinkedList线程不同步。
- LinkedList适合指定位置插入、删除操作,不适合查找;ArrayList、Vector适合查找,不适合指定位置的插入、删除操作。
- ArrayList在元素填满容器时会自动扩充容器大小的50%,而Vector则是100%,因此ArrayList更节省空间。
LinkedList 内部静态类 Node,也就是List 中节点类型:
private static class Node<E> {
E item;
Node<E> next;
Node<E> prev;
Node(Node<E> prev, E element, Node<E> next) {
this.item = element;
this.next = next;
this.prev = prev;
}
}
ArrayList:值可以为null,线程不安全,但是我们可以使用Collections.synchronzedList()方法使得一个ArrayList支持并发。
List<Integer> mySynchronziedArrayList = Collections.synchronizedList(new ArrayList<Integer>());
Vector:本身支持并发。
LinkedList:值可以为null,但是当我们调用时会抛出NullPointerException异常。