Java集合(三)List接口

  List接口继承自Collection接口,是单列集合的一个重要分支,习惯性地会将实现了List接口的对象成为List集合。在List集合中允许出现重复的元素,所有的元素是以一种线性的方式进行存储的,在程序中可以通过索引(类似于数组中的元素角标)来访问集合中的指定元素。List集合还有一个特点就是元素有序,即元素的存入顺序和取出顺序一致。

  List作为Collection集合的子接口,不但继承了Collection接口中的全部方法,而且还增加了一些操作集合的特有方法:

void add(int  index,E  element)              将元素element插入在List集合的指定索引位置

boolean addAll(int  index,Collection  c)  将集合c包含的所有元素插入到List集合的指定索引位置

E get(int index)             返回集合索引index处的元素

E set(int  index,E  element)          将索引index处元素替换成element元素,并将替换后的元素返回

int indexOf(E  e)            返回对象e在List集合中首次出现的位置索引

int lastIndexOf(E  e)           返回对象e在List集合中最后一次出现的位置索引

List subList(int  fromIndex,int  toIndex)   返回从索引fromIndex(包括)到头Index(不包括)处所有元素集合组成的子集合

 

ArrayList集合

  Array List 是 List 接口的一个实现类,它是程序中最常见的一种集合。在ArrayList内部封装了一个长度可变的数组对象,当存人的元素超过数组长度时,Array List
分配一个更大的数组来存储这些元素,因此可以将 ArrayList 集合看作一个长度可变数组。

  正是由于ArrayList内部的数据存储结构时数组的形式,在增加或删除指定位置的元素时,会创建新的数组,效率比较低,因此不适合做大量的运算。但是这种数组结构允许程序通过索引的方式访问元素,因此使用ArrayList集合在遍历和查找元素时显得非常高效。

 

 

 LinkedList集合

  ArrayList 集合在查询元素时速度很快,但在增删元素时效率较低,为了克服这种局限性可以使用 List按口的另一个实现类 Linkedlist。 该集合每部包含有两个 Node类型的first 和last属性维护一个双向循环链表,链表中的每一个元素都使用引用的方式来记住它的前一个元素和后一个元素,以而可以将所有的元素彼此连接起来。当插人一个新元素时。只需要修改元素之间的这种引用关系即可,删除一个节点也是如此。正因为这样的存储结构,所以 LinkedList 集合对于元素的增删操作表现出很高的效率。

 

LinkedList除了从接口Collection和List中继承并实现了集合操作方法外,还专门定义了增删操作的特定方法:

Vector

  Vector底层使用数组实现的List,相关的方法都加了同步检查,因此“线程安全,效率低”。比如:indexOf方法就增加了synchronized同步标记

 

建议:

如何选用ArrayList,LinkedList,Vector?

1.需要线程安全时,用Vector

2.不存在线程安全时,并且查找较多用ArrayList(一般使用它)

3.不存在线程安全时,增加或删除元素较多时用LinkedList

 

posted on 2022-06-08 13:26  键盘敲烂的朱  阅读(165)  评论(0编辑  收藏  举报