List集合

2019-05-22 06:30:35来源:博客园 阅读 ()

新老客户大回馈,云服务器低至5折

 

List集合有序、元素可重复。以元素的添加顺序作为集合的排列顺序,用下标索引集合中的元素。

List因为使用下标索引元素,所以元素可重复。Set使用元素本身来索引,所以元素不能重复。

 

List的继承关系:

 

 

 

List继承了Collection的所有方法,也有自身的一些方法(下标操作):

void add(int index,Object element)   在指定处插入一个元素

boolean  addAll(int index,Collection c)   在指定处插入c的所有元素

Object get(int index)   获取指定位置处的元素

int indexOf(Object obj)   返回该对象在集合中第一次出现的位置

int lastIndexOf(Object obj)   最后一次出现的位置

Object  remove(int index)   删除并返回指定位置的元素

Object  set(int index,Object obj)   替换/设置指定位置的元素,并返回旧的元素

List  subList(int start,int end)   返回子List

 ListIterator listIterator()   返回List集合专用的迭代器

 

Java8新增了sort()、replaceAll()2个方法,可以自定义排序规则、匹配模板。

 

 

 

List接口常用的实现类:

1、ArrayList、Vector。

ArrayList、Vector都是基于数组实现的List接口,内部都封装了一个动态的、长度可变的数组。

 

向ArrayList、Vector集合中添加元素,如果数组长度不够,会自动调用  ensureCapacity()   重新设置数组长度,一般不用我们操心。

如果要向ArrayList、Vector添加大量元素,可以手动调用  ensureCapacity()   一次性增大数组长度,这样可以减少重新分配的次数,提高性能。

ensureCapacity(int minCapacity)      //参数是数组的最小元素个数

 

Vector有一个子类Stack,用于模拟栈这种数据结构。

 

ArrayList不是线程安全的,当多个线程同时访问、修改ArrayList集合时,需要手动同步该集合。

Vector是线程安全的,但这意味着Vector有更大的开销,所以性能低于ArrayList。

尽管Vector是线程安全的,但Vector的缺点太多了,尽量不要使用Vector。

 

 

 

2、LinkedList

LinkedList不仅实现了List接口,还实现了Queue接口的子接口Deque。Queue接口用于模拟队列这种数据结构。

LinkedList是基于链表实现List接口的,内部维护了一个链表,来实现有序。

 

 

 

性能分析:

Queue集合、List集合是Java中的线性表结构。Queue很少使用。

ArrayList、Vector是基于数组的,LinkedList是基于链表的。

 

Vector既要维护一个数组,又要保证线程安全,开销较大,性能最差,一般不用。

ArrayList基于数组,查找元素较快,适合多查找的操作,但插入、删除需要移动大量数组元素。

LinkedList基于链表,适合经常插入、删除的操作,但查找效率不高。

 

虽然LinkedList、ArrayList都有 Object  get(int index),void  set(int index, Object obj)方法 ,

但LinkedList基于链表,它操作元素的方法基本上都要遍历链表,直到指定的元素才停下。尽管要遍历链表,但删除、插入时不用移动其它元素,速度较快。它的get()、set()都不是随机存取,要遍历链表,直到指定的index才停下来,速度很慢,获取、设置元素值尽量不要用get()、set(),而使用迭代器,遍历集合,迭代器更专业,速度更快。

ArrayList基于数组,它的get()、set()才是随机存取。尽管是随机存取,但插入、删除元素时要移动大量的元素,速度很慢。获取、设置元素的值不要用迭代器,尽量用get()、set(),随机存取更快。


原文链接:https://www.cnblogs.com/chy18883701161/p/10891347.html
如有疑问请与原作者联系

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:ArrayList和LinkedList区别(蚂蚁金服面试题)

下一篇:Spring Cloud(8):Sleuth和Zipkin的使用