Vector、ArrayList、LinkedList的区别

Vector、ArrayList、LinkedList实现的都是List,即有序集合。

Vector,是Java早期的线程安全的动态数组。默认创建大小为10的Object数组,将capacityIncrement设置为0,在插入的时候,如果数组大小不够,当capacityIncrement>0的时候,会将数组扩大到size+capacityIncrement。当capacityIncrement<0的时候,会将数组扩大为现有的2倍。

ArrayList是是一个动态数组实现,不是线程安全的,所以性能会比Vector好。在扩容的时候则增加50%.扩容时调用System.arraycopy()方法进行大量的数组复制,在删除的时候不会减少数组的大小,如果要缩小的话用trimToSize方法,

LinkedList是Java提供双向链表,不需要像上面两个扩容,也不是线程安全的。在插入元素的时候,必须新创建一个Entry对象,更新元素的前后引用。

Vector、ArrayList是动态数组,内部元素以数组的形式去顺序存储的,比较适合随机访问的场合,除了尾部插入和删除元素,其他的性能会比较差,如果我们在中间位置需要插入一个元素,则需要将后面的元素依次后移,而LinkedList则是进行节点插入删除效率高,随机访问性能比前两者低。

Arrays.sort()里底层用的排序算法,数据集的不同,算法不同。当数据集<47的时候用的是插入排序,当47<数据集<286的时候用的是双轴快排,当数据集>286的时候用的是归并排序。如果是对象数据类型则用的是TimeSort算法,是归并排序的优化版本。

Java8的时候引入了并行排序算法,充分利用了现代核心处理器,底层基于fork-join框架,当处理器处理百万数据的时候,处理速度会加快。

猜你喜欢

转载自blog.csdn.net/OrangeRawNorthland/article/details/83066474